洛谷题解 P3225 [HNOI2012] 矿场搭建
posted on 2023-09-24 10:24:00 | under 未分类 | source
思路
艰难地 AC 了,写篇题解记录下。
和无向图中点的连通性有关,显然要向点双上面靠。
然后手玩数据时,惊讶地发现最少救援点数量就是割点数量为 \(1\) 的点双的数量。
我们暂且称其为单点双,其它的点双叫做双点双。
之后又简要证明一下,发现确实如此:
首先我们知道,单点双中必定要有一个救援出口,否则删掉割点后,这里的工人就 GG 了。
然后我们又发现,双点双们一定是被单点双所包围的,于是双点双上不需要设救援出口,因为一定有某个单点双上的救援出口可以涉及到这来。
那么还剩一个问题:在单点双上有必要设两个出口吗?答案是不用。我们想,在最坏情况下,某个单点双的出口恰好发生事故,可由于其割点未被阻断,因此这上面剩下的工人可以跑到其它救援出口上。
还有一种情况:当这个图没有割点时,只放一个不够,可能就在这发生事故,应该放两个。
那么方案数也很好统计了:单点双时有 \(siz-1\) 种选法,没有割点时有 \(C(siz,2)\) 种选法,用乘法原理相乘即可。
最后是血的教训:注意图可能不连通(题面上的注释纯属误导)、注意判断孤立点。
做题历程记录
其实我是先推单点双的情况,然后发现性质并在样例上得到验证的(没看题解啊)。
然后光速写完,发现模板打错了,结果改完后还是只有 40pts,答案总是少几个。
接下来我反复检查代码和思路正确性,足足搞了 1h 还是不知道为啥。走投无路看了看 AC 代码,竟发现它们都处理了图不连通的情况,我改了改马上就过了。
直到现在我还是不理解,明明题目有说“\(V\) 中任意两点连通”,但数据还是会出现不连通的情况。
这个故事告诉我们不管题目说没说,按不连通来做一定没错。

浙公网安备 33010602011771号