关于 U105261 「子序列删除问题」的讨论
首先,这个问题显然是一个最小割:
我们考虑将每个可以在 LIS 上的建点
u_{in} \rightarrow_1 u_{out} ,其中在 LIS 中第k 个的在第k 层,然后给相邻层之间可以对接的连边+\infty ,我们要求的就是这样一个图的最小割。而为了找到字典序最小的那个割,我们只需从小到大访问每个点是否可以被调整。
考虑一条边是否能够存在于最小割中,我们需要通过循环流增广的调整使得u\in S, v\in T ,这需要此时的u\rightarrow v 没有流量。我们需要将此时的s\leadsto u\rightarrow v\leadsto t 的流量退掉。
有几个指标:
由于抽屉原理,可得
接下来讨论最小割的几个做法:
一、暴力建图。
-
V = \Theta(N) -
E = \Theta(N^2) -
D = \Theta(L) - 是 unit-capacity 的图。
由此可知,最大流的复杂度有上界
二、线段树优化建图。
-
V = \Theta(N\log N) -
E = \Theta(N\log N) -
D = \Theta(L\log N)
由于这个图的 bfs 轮数肯定和一是相同的,因为你只是优化了中间边的 bfs 复杂度,所以最大流的复杂度有上界
上述分析是否正确尚不确定,但是我们还有 dinic 来源的上界
退流部分是
三、单调队列优化建图。
-
V=\Theta(N) -
E=\Theta(N) -
D=\Theta(N)
这个建图的具体方法:注意到连边有如下性质:每个点对应到上一层的
由于这个图的 bfs 轮数肯定和一是相同的,因为你只是优化了中间边的 bfs 复杂度,所以最大流的复杂度有上界
最大流的复杂度有上界
退流部分是
四、不跑最大流。
首先我们将简单说明原图等价于一个平面图,这仅仅是因为各层转移的
我们考虑虚点
[L, R] 是连向L\sim R 的每个点的,那么我们有[L, R] \rightarrow \{[L+1,R], [L, R - 1]\} 。这是一个网格图,而[L, R] 是单调的,所以在下一个点的需要过程中,我们首先把L 变大,这就是一个原来的直角三角形边上的一个三角形,然后扩展出来。
因此我们发现这是一个被简化的平面图,可以通过对偶最短路计算最小割。
我们记割掉
这里我们跑的是一个 0/1 最短路,可以
然后看看如何构造方案,我们只需每次看一条边是不是加上之后有一条最短路穿过所有被选的边。我们首先限定在最短路 DAG 上。注意可以把