无重边无向连通图的割点和桥

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<vector>
 4 #include<algorithm>
 5 using namespace std;
 6 vector<vector<int> > g;
 7 int dfn[11000];//节点在dfs过程中的访问序号(也可以叫做开始时间)
 8 int low[11000];//节点的子树中能够通过非父子边追溯到的最早的节点的dfs开始时间
 9 int fa[11000];//dfs树中每个点的父节点
10 int viscv[11000];//标记是否为割点
11 int ntime;//dfs中记录时间
12 int n,m;//点数和边数
13 void tarjan(int u,int father)//father是u的父节点
14 {
15     fa[u]=father;
16     int i;
17     low[u]=dfn[u]=ntime++;
18     for(i=0;i<g[u].size();i++)
19     {
20         int v=g[u][i];
21         if(!dfn[v])
22         {
23             tarjan(v,u);
24             low[u]=min(low[u],low[v]);
25         }
26         else if(father!=v)
27         {
28             low[u]=min(low[u],dfn[v]);
29         }
30     }
31 }
32 void solve()
33 {
34     int sontree=0;//dfs树中根节点的子树的数目
35     int i;
36     tarjan(1,0);
37     for(i=2;i<=n;i++)
38     {
39         int v=fa[i];
40         if(v==1) sontree++;
41         else
42         {
43             if(dfn[v]<=low[i])
44                 viscv[v]=1;
45         }
46     }
47     if(sontree>1) viscv[1]=1;
48     for(i=1;i<=n;i++)
49     {
50         if(viscv[i])
51             printf("%d\n",i);
52     }
53     for(i=1;i<=n;i++)
54     {
55         int v=fa[i];
56         if(v>0&&dfn[v]<low[i])
57             printf("%d %d\n",v,i);
58     }
59 }
60 int main()
61 {
62     int u,v,i;
63     ntime=1;
64     while(scanf("%d%d",&n,&m)!=EOF)
65     {
66     g.clear();
67     g.resize(11000);
68     ntime=1;
69     for(i=0;i<m;i++)//点编号是从1开始的
70     {
71         scanf("%d%d",&u,&v);
72         g[u].push_back(v);
73         g[v].push_back(u);
74     }
75     memset(dfn,0,sizeof(dfn));
76     memset(low,0,sizeof(low));
77     memset(fa,0,sizeof(fa));
78     memset(viscv,0,sizeof(viscv));
79     solve();
80     }
81     return 0;
82 }
时间: 2024-10-20 18:45:41

无重边无向连通图的割点和桥的相关文章

无重边有向连通图的强连通分量

1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<vector> 5 #include<stack> 6 using namespace std; 7 int n,m,ntime;//ntime记录dfs访问时间 8 int instack[11000];//标记点是否在栈中 9 int dfn[11000];//节点在dfs过程中的访问序号(也可以叫做

图的割点、桥与双连通分支

原文地址:图的割点.桥与双连通分支 [点连通度与边连通度] 在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合.一个图的点连通度的定义为,最小割点集合中的顶点数. 类似的,如果有一个边集合,删除这个边集合以后,原图变成多个连通块,就称这个点集为割边集合.一个图的边连通度的定义为,最小割边集合中的边数. [双连通图.割点与桥] 如果一个无向连通图的点连通度大于1,则称该图是点双连通的(point biconne

【转载】图的割点、桥与双连通分支

[点连通度与边连通度] 在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合.一个图的点连通度的定义为,最小割点集合中的顶点数. 类似的,如果有一个边集合,删除这个边集合以后,原图变成多个连通块,就称这个点集为割边集合.一个图的边连通度的定义为,最小割边集合中的边数. [双连通图.割点与桥] 如果一个无向连通图的点连通度大于1,则称该图是点双连通的(point biconnected),简称双连通或重连通.一个

【转】图的割点、桥与双连通分支

原文地址:https://www.byvoid.com/blog/biconnect 图的割点.桥与双连通分支 [点连通度与边连通度] 在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合.一个图的点连通度的定义为,最小割点集合中的顶点数. 类似的,如果有一个边集合,删除这个边集合以后,原图变成多个连通块,就称这个点集为割边集合.一个图的边连通度的定义为,最小割边集合中的边数. [双连通图.割点与桥] 如果一个

图的割点、桥和双连通分支的基本概念

[点连通度与边连通度] 在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边之后,原图变成多个联通块,就称这个点集为割点集合. 一个图的点连通度定义为,最小个点集合中的顶点数. 类似的,如果有一个边集合,删除这个编辑和以后,原图变成多个连通块,就成这个边集为割边集合. 一个图的边连通度的定义为,最小割边集合中的边数. [双连通图.割点与桥] 如果一个无向连通图的点连通度大于1,则称该图是点双连通的(point biconnected),简称双连通或重连通.一

求无向连通图的割点

求一个连通图的割点,割点的定义是,如果除去此节点和与其相关的边,图不再连通. 连通图的定义:如果图中任意两点都是连通的,那么图被称作连通图.如果此图是有向图,则称为强连通图(注意:需要双向都有路径) 割点:在无向连通图中,删除一个顶点v及其相连的边后,原图从一个连通分量变成了两个或多个连通分量,则称顶点v为割点,同时也称关节点 (Articulation Point).多连通图没有割点,若在多连通图上至少删去k个顶点才能破坏图的连通性,则称此图为k连通图.貌似有向连通图没有割点这个说法. 连通分

POJ 3352 &amp; 3177 无向图的边-双连通分量(无重边 &amp; 重边)

无向图的边-双连通分量 无向图的双连通分量实际上包含两个内容:点-双连通分量.边-双连通分量 点-双连通分量是指:在该连通分量里面,任意两个点之间有多条点不重复的路径(不包括起点.终点) 边-双连通分量是指:在该连通分量里面,任意两个点之间有多条边不重复的路径 在求解点-双连通分量时,无向图有没有重边都没有关系,因为一个点只能经过一次(有重边也无妨) 该篇文章并不深入讨论点-双连通分量,给出代码给有兴趣的参考参考:(也可以看看POJ2942这道题, 解题报告) /*===============

【有重边与无重边的无向图的割边求法】

无向图无重边:也就每两个顶点之间最多有一条边相连[也就是根据顶点编号即可确定边][如下] 无向图有重边如:顶点1与顶点2有两条或更多的边直接相连[也就是不能根据顶点编号来确定边][如下] 首先介绍无重边的无向图的割边求法:由于无重边的无向图中可以根据顶点来确定边,所以函数中的参数 u 和 fa  都是顶点. 1 #include <stdio.h> 2 #include <string.h> 3 #include <vector> 4 using namespace s

uva 315 Network(连通图求割点)

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=251  Network  A Telephone Line Company (TLC) is establishing a new telephone cable network. They are connecting several places numbered by integers