洛谷P3388 【模板】割点

tarjan求割点的模板题。
复制代码
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e5+10;
 4 int head[N],to[N<<1],nxt[N<<1],tot;
 5 int dfn[N],low[N],st[N],top;
 6 int cnt,deg[N],idx,n,m;//deg[i]表示i点属于点双的数量 
 7 vector<int> a[N];
 8 
 9 void add(int u,int v){
10     nxt[++tot]=head[u];
11     head[u]=tot;
12     to[tot]=v;
13 }
14 
15 void dfs(int u,int fa){
16     low[u]=dfn[u]=++cnt;
17     st[++top]=u;
18     for(int i=head[u];i;i=nxt[i]){
19         int v=to[i],vv;
20         if(v!=fa){
21             if(!dfn[v]){
22                 dfs(v,u);
23                 low[u]=min(low[u],low[v]);
24                 if(low[v]>=dfn[u]){//找到新的点双 
25                     idx++;
26                     a[idx].push_back(u);
27                     deg[u]++;
28                     do{
29                         vv=st[top--];
30                         a[idx].push_back(vv);
31                         deg[vv]++;
32                     }while(vv!=v);
33                 }
34             }
35             else low[u]=min(low[u],dfn[v]);
36         }
37     }
38 }
39 
40 int main(){
41     scanf("%d%d",&n,&m);
42     while(m--){
43         int a,b;
44         scanf("%d%d",&a,&b);
45         add(a,b);add(b,a);
46     }
47     for(int i=1;i<=n;i++)
48         if(!dfn[i]){
49             dfs(i,0);
50             top=0;
51         }
52     int ans=0;
53     for(int i=1;i<=n;i++)
54         ans+=deg[i]>1;//deg值>1的点是割点 
55     printf("%d\n",ans);//割点个数 
56     for(int i=1;i<=n;i++)
57         if(deg[i]>1) printf("%d ",i);
58         
59     /*for(int i=1;i<=idx;i++){ 输出每个点双的点编号 
60         printf("%d:",i);
61         for(int j=0;j<a[i].size();j++)
62             printf("%d",a[i][j]);
63         printf("\n");
64     }*/
65 }
复制代码

 



如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
posted @   YHXo  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示