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

无向图割点模板

时间:2019-07-23 09:50:39      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:min   next   div   return   main   clu   include   pre   span   

 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 }

 

无向图割点模板

标签:min   next   div   return   main   clu   include   pre   span   

原文地址:https://www.cnblogs.com/jiuduSHENBENG/p/11229688.html

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