无向图割点模板

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 

 

以上是关于无向图割点模板的主要内容,如果未能解决你的问题,请参考以下文章

❤️数据结构入门❤️(3 - 2)- 无向图割边割点

Tarjan求无向图割点桥详解

POJ1523SPF[无向图割点]

P3387 模板缩点 && P3388 模板割点(割顶)

2018/2/11 每日一学 无向图割顶和桥

无向图的割点