tarjan算法――割边(桥)

匿名 (未验证) 提交于 2019-12-03 00:10:02

模板:

 1 int vis[maxn],dfn[maxn],low[maxn];  2 int n,m,a[maxn][maxn],lay;  3 #define mp make_pair  4 #define fi first  5 #define se second  6 vector<pair<int,int> >ans;  7 void tarjan(int u,int father) {  8     low[u]=dfn[u]=++lay;  9     vis[u]=1; 10     for(int v=0;v<n;v++) { 11         if(v==father) continue; 12         if(a[u][v]&&!vis[v]) { 13             tarjan(v,u); 14             low[u]=min(low[u],low[v]); 15             if(dfn[u]<low[v]) 16                 ans.push_back(mp(min(u,v),max(u,v))); 17         } 18         else if(a[u][v]) low[u]=min(dfn[v],low[u]); 19     } 20 }
View Code

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!