无向图割点模板
Posted jiudushenbeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无向图割点模板相关的知识,希望对你有一定的参考价值。
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,m,first[200005],next[200005],to[200005],tot,dfn[20005],low[20005],num,ans; 4 bool f[20005]; 5 void add(int x,int y) 6 7 tot++; 8 next[tot]=first[x]; 9 first[x]=tot; 10 to[tot]=y; 11 12 void tarjan(int x,int root) 13 14 num++; 15 dfn[x]=low[x]=num; 16 int flag=0; 17 for(int i=first[x];i;i=next[i]) 18 19 int y=to[i]; 20 if(dfn[y]==0) 21 22 tarjan(y,root); 23 low[x]=min(low[x],low[y]); 24 if(dfn[x]<=low[y]) 25 26 flag++; 27 if(x!=root||flag>1) 28 29 if(f[x]==false) ans++; 30 f[x]=true; 31 32 33 34 else low[x]=min(dfn[y],low[x]); 35 36 37 38 int main() 39 40 scanf("%d%d",&n,&m); 41 for(int i=1;i<=m;i++) 42 43 int x,y; 44 scanf("%d%d",&x,&y); 45 add(x,y); 46 add(y,x); 47 48 for(int i=1;i<=n;i++) if(dfn[i]==0) tarjan(i,i); 49 printf("%d\n",ans); 50 for(int i=1;i<=n;i++) 51 52 if(f[i]==true) printf("%d ",i); 53 54 return 0; 55
以上是关于无向图割点模板的主要内容,如果未能解决你的问题,请参考以下文章