推荐一篇感觉写得比较好的,内容很全面,定义、求法都囊括在内:
http://blog.youkuaiyun.com/tsaid/article/details/6877404
然后我就没什么要说的了。。放个点双模板。
//当fa==0,就是第一次进入时,割点不能是叶子节点(要特判,本代码不能搞)
void tar(int v,int fa){
dfn[v]=low[v]=++Time;
for (int k=first[v];k;k=next[k]){
int u=to[k];
if (u==fa) continue;
if (!dfn[u]){
sta[++top]=k;//保存边
tar(u,v);
upmin(low[v],low[u]);
if (low[u]>=dfn[v]){
while (sta[top+1]!=k){
u=sta[top--];//退出边。
//....若要找出该双连通分量中所有点,就是所有to[u]和点v。
}
}
}else upmin(low[v],low[u]);
}
}