洛谷题解 P3225 [HNOI2012] 矿场搭建

posted on 2023-09-24 10:24:00 | under 未分类 | source

思路

艰难地 AC 了,写篇题解记录下。

和无向图中点的连通性有关,显然要向点双上面靠。

然后手玩数据时,惊讶地发现最少救援点数量就是割点数量为 \(1\) 的点双的数量。

我们暂且称其为单点双,其它的点双叫做双点双。

之后又简要证明一下,发现确实如此:

首先我们知道,单点双中必定要有一个救援出口,否则删掉割点后,这里的工人就 GG 了。

然后我们又发现,双点双们一定是被单点双所包围的,于是双点双上不需要设救援出口,因为一定有某个单点双上的救援出口可以涉及到这来。

那么还剩一个问题:在单点双上有必要设两个出口吗?答案是不用。我们想,在最坏情况下,某个单点双的出口恰好发生事故,可由于其割点未被阻断,因此这上面剩下的工人可以跑到其它救援出口上。

还有一种情况:当这个图没有割点时,只放一个不够,可能就在这发生事故,应该放两个。

那么方案数也很好统计了:单点双时有 \(siz-1\) 种选法,没有割点时有 \(C(siz,2)\) 种选法,用乘法原理相乘即可。

最后是血的教训:注意图可能不连通(题面上的注释纯属误导)、注意判断孤立点。

做题历程记录

其实我是先推单点双的情况,然后发现性质并在样例上得到验证的(没看题解啊)。

然后光速写完,发现模板打错了,结果改完后还是只有 40pts,答案总是少几个。

接下来我反复检查代码和思路正确性,足足搞了 1h 还是不知道为啥。走投无路看了看 AC 代码,竟发现它们都处理了图不连通的情况,我改了改马上就过了。

直到现在我还是不理解,明明题目有说“\(V\) 中任意两点连通”,但数据还是会出现不连通的情况。

这个故事告诉我们不管题目说没说,按不连通来做一定没错。

posted @ 2026-01-14 18:08  Zwi  阅读(2)  评论(0)    收藏  举报