【题解】UOJ Round #21
// created on 22.09.21
A. 士兵调度
考虑这样一种构造方法:每次从大小为 \(s\times s\) 的矩形,先在左侧加满一列,再在上方加满一行,每次的增量都是 \(O(s)\) 。具体实现的时候,前面的操作直接动点,在最后 \(m\) 次操作再输出,发现恰好紧贴上界。
提交记录:Submission #584420 - Universal Online Judge (uoj.ac)。
B. 挑战最大团
算是一道 educational 题。
可以发现,如果一个图是优美的,那么其补图也是优美的,而且任意子图也是优美的。第一下我们能想到的当然是转补图找性质,但是我们发现补图的性质和原图是一模一样的,而且求独立集也并不那么好做。
我们发现答案是可以由连通块合并:完全图是相加,独立集是卷积。我们转而考虑连通性。如果当前图不是联通的,那么递归到联通子图解决子问题。如果当前图是联通的,那么补图是什么状态呢?
我们不妨 猜测补图是不连通的。由于性质的特殊性,考虑归纳证明:设对于任一大小为 \(n-1\) 的优美的图,如果其联通,那么补图不连通。接着考虑反证,对于当前大小为 \(n\) 的图 \(G=(V,E)\),如果其联通,且补图联通,那么考虑任意一点 \(u\),一定在原图和补图中有边相连。
我们考虑 \(G\) 删除 \(u\) 得到的 \(G'\),因为 \(G\) 是优美的,所以 \(G'\) 是优美的,因此 \(G'\) 和 \(G'\) 的反图中必有一个不连通。不失一般性,这里假定 \(G'\) 不连通。
假设 \(u\) 链接了若干连通块,那么一定存在一个连通块,满足其内部并不是所有的点都与 \(u\) 相连。那么从 \(u\) 开始,走一个与其相连的点 \(a\) 。再走一个与 \(a\) 相连,但是不与 \(u\) 相连的点 \(b\) 。而反过来,在另外的连通块中找到一条出边 \(u\rightarrow v\),这样 \(u,v,a,b\) 四元组非法!
因此在当前问题下,要么直接递归解决,要么在补图递归解决!
接下来是实现的问题。我们每次要分裂连通块,考虑设计一个算法,满足分裂成没有边相连的、大小分别为 \(x,y\) 的两个部分,需要的代价是 \(O(xy)\),就可以做到总 \(O(n^2)\) 的复杂度。
再次观察性质,发现图中直径是 \(\leq 2\) 的。意味着我们如果从度数为 \(d\) 的点拓展,花费 \(O(d(n-d))\) 的代价就可以知道联通情况。如果不连通的话,包含起点的连通块大小显然至少为 \(d+1\),而另外一个连通块,因为度数都不小于 \(d\),因此点数也至少为 \(d+1\),那么显然有 \(xy\leq d(n-d)\),可以接受。
于是,只需要选取原图中度数最小的点 \(x\),和反图中度数最小的点 \(y\),从度数小的一方开始做,分裂的代价就不超过 \(2xy\) 。
提交记录:Submission #584442 - Universal Online Judge (uoj.ac)。
3. 你将如闪电般归来
这种计数你觉得我会?