poj3352 Road Construction 边双连通分量tarjan算法

http://poj.org/problem?id=3352

题意:有n个城市m条道路,一开始任何两个城市相互可达。现在需要某条修路,修路时该道路不可通行。然后需要搭建临时的桥,使得任何两个城市仍是相互可达的。求最少需要搭建的桥的数量。

题解:这是一个无向图,去掉一条边就不连通。那么这条边就是桥。现在要搭建临时的桥,搭建完后与原图一起,这个有向图就是边双连通的(边连通度大于1)。现在就是求加上几条边使得这个无向图是边双连通的。

首先tarjan求出边双连通分量,对边双连通分量进行缩点,那么就形成一棵树。

然后就是对于一棵树,如何加边使得它边双连通,有一个结论:加边数=(叶子节点数+1)/2。即加边后无度数为1的点。

代码:

#include
#include
#include
#include
#include
#include

#include
#include
#include
#include
#include

#include
#include

#define debug cout<<"aaa"<


你可能感兴趣的:(图论)