题目:加几条边才能使原图变成边双连通分量。
[求割边]对图深度优先搜索,定义DFS(u)为u在搜索树(以下简称为树)中被遍历到的次序号。定义Low(u)为u或u的子树中能通过非父子边追溯到的最早的节点,即DFS序号最小的节点。根据定义,则有:Low(u)=Min {DFS(u),DFS(v)|(u,v)为后向边(等价于DFS(v)<DFS(u)且v不为u的父亲节点),Low(v)|(u,v)为树枝边}
[条件]一条无向边(u,v)是桥,当且仅当(u,v)为树枝边,且满足DFS(u)<Low(v)
[求点双连通分支]只需在求出所有的桥以后,把桥边删除,原图变成了多个连通块,则每个连通块就是一个边双连通分支。桥不属于任何一个边双连通分支,其余的边和每个顶点都属于且只属于一个边双连通分支。
[注]重边对求割边和边连通分量有影响,此题无重边,重边对求割边和边连通分量有影响,重边处理方法是在DFS时标记每条边及其反向边是否被访问过(即按边访问),而不是判断顶点(按点访问)。
POJ 3352(无重边):
#include
#include
#include
#include
#include
#include
#include
#include
#include
POJ 3177 (有重边):
#include
#include
#include
#include
#include
#include
#include
#include
#include