POJ3352 Road Construction / POJ3177 Redundant Paths

题意

给你一个联通图,问你最少要添加多少条边才能把这个图变成一个双联通图。

思路

非常经典的边双联通分量缩点问题。找出图中所有的边双联通分量,把这些分量各自收缩为一个点,节点之间若有边,一定是割边,这样就得到了一棵由边联通分量缩成的点和割边组成的树,把一个树变成双联通图要添加的最少边数是(r+1)/2其中r是这棵树的节点数量,这是一个蛮重要的结论。

找边联通分量的方法有好多,可以找到所有割边之后,对于每个点启动一次dfs,搜索中屏蔽掉所有割边,这样就可以收割所有的边双联通分量,也可以对于每个点直接启动一次tarjan算法,在函数返回的过程中,收割掉所有low值一样的节点就可以得到边双联通分量。这份代码使用的是后一种方案。

代码

两个题一个数据中有重边,一个没有,这份代码考虑了这个问题,所以连边都能顺利过,双倍经验。

 

Leave a Reply

Scroll to top