No point cut template to map

 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 }

 

Guess you like

Origin www.cnblogs.com/jiuduSHENBENG/p/11229688.html