tarkjan求无向图割点模板

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 
 5 int n,m;
 6 const int maxn=1e5+2;
 7 const int maxm=maxn<<1;
 8 struct node
 9 {
10     int to;
11     int nxt;
12 }e[maxm];
13 int head[maxn];
14 int tot;
15 int id;
16 int root;
17 int low[maxn];
18 int num[maxn];
19 bool vis[maxn];
20 int pa[maxn];
21 int cnt=0;
22 int art[maxn];
23 void init()
24 {
25     memset(head,-1,sizeof(head));
26     tot=0;
27     id=0;
28     memset(low,-1,sizeof(low));
29     memset(num,-1,sizeof(num));
30     memset(vis,false,sizeof(vis));
31     memset(pa,-1,sizeof(pa));
32     cnt=0;
33     memset(art,0,sizeof(art));
34 }
35 void add(int u,int v)
36 {
37     e[tot].to=v;
38     e[tot].nxt=head[u];
39     head[u]=tot++;
40 }
41 void findArt(int u)
42 {
43     vis[u]=true;
44     low[u]=num[u]=++id;
45     for(int i=head[u];i!=-1;i=e[i].nxt)
46     {
47         int v=e[i].to;
48         //树边
49         if(!vis[v])
50         {
51             pa[v]=u;
52             findArt(v);
53             if(low[v]>=num[u]&&u!=root)
54             {
55                 art[cnt++]=u;
56             }
57             low[u]=min(low[u],low[v]);
58         } 
59         else if(pa[v]!=u) //回退边
60         {
61             low[u]=min(low[u],num[v]);
62         } 
63     }
64 }
65 
66 void printArt()
67 {
68     int tmp=0; 
69     for(int i=head[root];i!=-1;i=e[i].nxt)
70     {
71         if(pa[e[i].to]==root) tmp++;
72     }
73     if(tmp>=2) art[cnt++]=root;
74     for(int i=0;i<cnt;i++)
75     {
76         printf("%d ",art[i]);
77     }
78     puts("");
79 }
80 
81 int main()
82 {
83     while(~scanf("%d%d",&n,&m))
84     {
85         init();
86         int u,v;
87         for(int i=1;i<=m;i++)
88         {
89             scanf("%d%d",&u,&v);
90             add(u,v);
91             add(v,u);
92         }
93         root=1;
94         findArt(root);
95         printArt();
96     }
97     return 0;
98  } 
Tarkjan求无向图割点

http://www.cnblogs.com/llhthinker/p/4954082.html

原文地址:https://www.cnblogs.com/itcsl/p/7764457.html