西安 Day1。
感冒还没好,牙龈炎也没好,明天还要考试,又要坐牢了/kk。
今天是 tyy 的图论选讲,感觉前面网络流部分还是在线的,平面图部分毒瘤 tyy 拿出了他的员交课件,恐怖,直接下线了。
看了 NAVI 和 Faze 的预选赛,你们俩怎么都打的这么稀碎/fn。
Override 真好听。
「WC2024」线段树
我会复读题解。
将每个元素看成点,于是可以说明,\([l,r)\) 被知道当且仅当 \(l,r\) 是连通的。
有结论:如果对于某个线段树上节点 \([l,r)\) 是不连通的,那么对应的 \(l\) 必然向右最多连通到某个 \(i\)。
于是设计 DP 状态 \(f(p,i)\) 表示节点 \(p\) 的 \(l\) 向右最多连通到 \(i\),\(g(p)\) 表示 \(l,r\) 连通。
转移分类讨论一下当前连不连就可以了,但是 \(f(ls,j)f(rs,k)\to f(p,j),g(p)\) 需要注意,此时 \([j+1,k)\) 不与外界连通,需要保证这个里面没有需要的区间连出去。
于是可以使用异或哈希刻画,将 \(j\) 换成 \(h_j\),则可以直接写成 \(f(ls,j)f(rs,j)\to f(p,j),g(p)\),于是可以使用线段树合并处理,Code,\(O(n\log n)\)。
CF1572D Bridge Club
并非很难。
注意到超立方体是一个二分图,于是可以套路性地建立网络流模型,跑最大费用最大流即可。
然而点边数量都太多了,于是有常见套路,保留必要的边,发现此时的边只需要保留前 \(2nk\) 大,理由是每选一个匹配会丢掉 \(2n\) 量级的边。
跑最大费用最大流,\(O(n^2k^3)\),但是跑不满,Code。
P3679 「CERC2016」Bipartite Blanket
首先左右两边的 \(S\) 都首先需要满足 Hall 定理,这可以高维前缀和预处理出来。
扩展 Hall 定理:左右两边都满足那就全部满足了。十分厉害。
于是 meet-in-middle 一下,排序后双指针就可以了,\(O(2^nn)\),Code。