码迷,mamicode.com
首页 > 其他好文 > 详细

双连通分量模板

时间:2016-01-10 12:52:33      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:

点双:

 1 void dfs(int u,int fa){
 2     dfn[u]=low[u]=++idx,stack[++top]=u;
 3     for (int p=now[u],v=son[p];p;p=pre[p],v=son[p])
 4         if (!dfn[v]) dfs(v,u),low[u]=min(low[u],low[v]);
 5         else if (v!=fa) low[u]=min(low[u],dfn[v]);
 6     if (dfn[u]==low[u]) top--; // fa-u is bridge
 7     if (low[u]==dfn[fa]){ //fa is cut-point
 8         int v; ++cnt;
 9         belong[fa].push_back(cnt);
10         do{v=stack[top--],belong[v].push_back(cnt);}while (v!=u);
11     }
12 }

边双:

 1 void dfs(int u){
 2     dfn[u]=low[u]=++idx,stack[++top]=u,in[u]=1;
 3     for (int p=now[u],v=son[p];p;p=pre[p],v=son[p])
 4         if (!dfn[v]) dfs(v),low[u]=min(low[u],low[v]);
 5         else if (in[v]) low[u]=min(low[u],dfn[v]);
 6     if (dfn[u]==low[u]){
 7         int v; ++cnt;
 8         do{v=stack[top--],in[v]=0,bel[v]=cnt;}while (v!=u);    
 9     }
10 }

 

双连通分量模板

标签:

原文地址:http://www.cnblogs.com/chenyushuo/p/5103916.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!