题目链接:Luogu P2860 [USACO06JAN] Redundant Paths G
题目描述:
给定一张连通的无向图,问最少添加多少条无向边,使得任意两个点之间存在至少两条路径。
题解:
首先我们考虑一个没有环且连通的无向图,这个时候这个无向图也就变成了一棵树。对于这样一棵树,我们不难发现每次选择两个叶子结点进行相连是最优的。此时答案也就是 ⌈ l e a f N o d e C n t 2 ⌉ \lceil \frac {leafNodeCnt} 2\rceil ⌈2leafNodeCnt⌉(若叶子结点个数为单数,需要将最后一个叶子结点与任意一个叶子结点相连接,如果只有一个叶子结点,那么将其与根节点相连即可)。
而对于环上的任意两个点,他们之间一定存在至少两条路径(顺时针与逆时针沿着环走)。因此我们不需要考虑环内部的结点。所以我们可以对无向图进行缩点(即将环上的点缩成一个点),在Tarjan
的过程中我们走过一条边就要将其与反向边打上标记,不走反向边,其余的过程与有向图缩点一致。
综上,首先将所有的环缩成一个点,然后对新图中出度为1
的结点(也就是叶子结点)之间连接边。如果记录出度为1
的结点个数为cnt
,那么最终的答案即为 ⌈ c n t 2 ⌉ \lceil \frac {cnt} 2\rceil ⌈2cnt⌉。
上面的过程也就是求边双联通分量。
代码:LuoguP2860