CF1383C String Transformation 2【分析性质,构造】
首先是转化成图论问题:在初始无边的 \(20\) 个点的有向图 \(G_1\) 中按某种顺序加边,使得 \(\forall i\in[1,n]\),\(A_i\) 到 \(B_i\) 有时间递增的路径。
构造 \(20\) 个点的有向图 \(G_2\),\(\forall i\in[1,n]\),\(A_i\) 连向 \(B_i\)。设弱连通块数为 \(c\),DAG 导出子图的最大点数是 \(k\)。可以构造出一种连 \(2n-c-k\) 条边的做法:
显然每个弱连通块独立,可以分别考虑。对于 \(n\) 个点的弱连通块,将点重标号使得最大 DAG 导出子图的拓扑序是 \(1,2,\cdots,m\),则按顺序连 \((1,2),(2,3),\cdots,(m,m+1),(m+1,1)\) 和 \((m+1,m+2),\cdots,(n-1,n),(n,m+1),(m+1,m+2),\cdots,(n-2,n-1)\)。
然后可以证明 \(2n-c-k\) 条边是下界。
考虑转化一下命题:设存在一种加 \(e\) 条边的合法方案,则可以找到一个大小至少为 \(2n-c-e\) 的点集,其导出子图是 DAG。
证明:增量法维护 \(G_2\) 的一个点集 \(S\)。一开始在 \(G_1\) 中无边,每个弱连通块只有一个点,\(S\) 是整个点集。然后考虑在 \(G_1\) 中加一条边 \((u,v)\)。
- 若 \(u,v\) 不在同一弱连通块,则合并这两个连通块。此时 \(|S|\) 不变,弱连通块数 \(-1\)。
- 若 \(u,v\) 在同一弱连通块,若 \(v\in S\) 则把 \(v\) 从 \(S\) 中删去,否则无事发生。此时弱连通块数不变,\(|S|\) 至多 \(-1\)。
可以证明最后得到的 \(S\) 内的点都不能走回自己,所以是 DAG。且恰好有 \(n-c\) 条边是第一种情况,因此 \(|S|\ge n-(e-(n-c))=2n-c-e\),得证。
所以只要把 \(c,k\) 求出来然后直接输出 \(2n-c-k\) 就可以所以这 tm 是数竞题么。
计算 DAG 导出子图最大点数可以暴力做状压 dp,对每个点集都计算出它是否是 DAG。时间复杂度 \(O(T|\Sigma|2^{|\Sigma|}+\sum n)\)。