无向连通图的割点和桥
割点
#include<bits/stdc++.h>
#define N 100005
using namespace std;int n,cnt;
int hd[N],nxt[N<<1],to[N<<1],tot;
int dfn[N],low[N],now;
int ans[N];void add(int a,int b)
{to[++tot]=b;nxt[tot]=hd[a];hd[a]=tot;
}void tarjan(int u,int fa)
{dfn[u]=low[u]=++now;for(int i=hd[u];i;i=nxt[i]){if(!dfn[to[i]]){tarjan(to[i],u);low[u]=min(low[u],low[to[i]]);}else if(to[i]!=fa) low[u]=min(low[u],dfn[to[i]]);}if(fa==1) cnt++;else if(low[u]>=dfn[fa]) ans[fa]=1;
}int main()
{scanf("%d",&n);for(int x,y;scanf("%d",&x),x;){while(scanf("%d",&y),y) add(x,y), add(y,x);}tarjan(1,0);ans[1]=(cnt>1);for(int i=1;i<=n;i++){if(ans[i]) printf("%d ",i);}
}
桥
#include<bits/stdc++.h>
#define N 100005
using namespace std;int hd[N],nxt[N<<2],to[N<<2],tot;
int dfn[N],low[N],now;
int ans,f[N];void add(int a,int b)
{to[++tot]=b;nxt[tot]=hd[a];hd[a]=tot;
}void tarjan(int u,int fa)
{f[u]=fa;dfn[u]=low[u]=++now;for(int i=hd[u];i;i=nxt[i]){if(!dfn[to[i]]){tarjan(to[i],u);low[u]=min(low[u],low[to[i]]);}else if(to[i]!=fa) low[u]=min(low[u],dfn[to[i]]);}
// if(fa&&low[u]<dfn[fa]) ans++;//不能这么写
}int main()
{int n,m,x,y;scanf("%d%d",&n,&m);while(m--){scanf("%d%d",&x,&y);add(x,y), add(y,x);}tarjan(1,0);for(int i=2;i<=n;i++){if(low[i]>dfn[f[i]]) ans++;}printf("%d\n",ans);
}
无向连通图的割点和桥相关推荐
- POJ1523:SPF(无向连通图求割点)
题目:http://poj.org/problem?id=1523 题目解析: 注意题目输入输入,防止PE,题目就是求割点,并问割点将这个连通图分成了几个子图,算是模版题吧. #include < ...
- POJ1144:Network(无向连通图求割点)
题目:http://poj.org/problem?id=1144 求割点.判断一个点是否是割点有两种判断情况: 如果u为割点,当且仅当满足下面的1条 1.如果u为树根,那么u必须有多于1棵子树 2. ...
- 【图论】求无向连通图的割点
一篇写的非常好的博客,非常容易理解. http://www.cnblogs.com/en-heng/p/4002658.html 省选前两天,我还在看新的算法,吃枣药丸 转载于:https://www ...
- 图的割点、桥与双连通分支
[点连通度与边连通度] 在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合.一个图的点连通度的定义为,最小割点集 ...
- [转载]图的割点、桥与双连通分支
[点连通度与边连通度] 在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合.一个图的点连通度的定义为,最小割点集 ...
- 第1节 连通性强连通、割点和桥(一)
文章目录 无向图割点.桥.双连通分量 Tarjan算法求割点和桥(割边) 代码: 边双连通分量 和 点双连通分量 代码 边双连通分量 和 点双连通分量 的缩点 有向图的弱连通与强连通 强连通分量 Ko ...
- 图的割点、桥和双连通分支的基本概念
点连通度与边连通度 回到正题,首先介绍下什么是图的边连通度和点连通度.一般来说,点连通度是指对应一个图G,对于所有点集U属于V(G),也就是V(G)的子集中,使得G-U要么是一个非连通图,要么就是一个 ...
- 图的割点、桥与双连通分支的基本概念
[点连通度与边连通度] 在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合.一个图的点连通度的定义为,最小割点集 ...
- tarjan算法求无向图的割点和桥
tarjan算法求无向图的割点与桥 一篇tarjan算法求割点与桥的完整的解释,写的真的好认真 以下代码来自kuangbin的模板 4.5 图的割点.桥和双连通分支的基本概念 [点连通度与边连通度] ...
最新文章
- 字符编码简介 ANSI Unicode Unicode big endian UTF-8
- JQuery笔记(一)
- 雅虎向阿里巴巴示好原因有二
- 完善Linux/UNIX审计 将每个shell命令记入日志
- input-text
- Dubbo(五)之动态配置中心
- ASP.NET MVC下使用AngularJs语言(一):Hello your name
- 计算机体系结构及其硬件构成
- matlab半波整流怎么做,基于Matlab的单相半波可控整流电路的设计与仿真.doc
- Error creating bean with name错误,spring-boot报错
- 策略模式探究(二)多个门禁对接使用策略模式
- 专利写作规范及如何写一篇专利
- android屏幕点击录制脚本,Android录制屏幕脚本
- Shopee平台发布针对疫情政策的通知
- 相位误差对SAR图像的影响
- 二维绕任意点旋转_旋转变换(一)旋转矩阵
- 数据分析岗位招聘分析
- 0day安全:软件漏洞分析技术(第2版)pdf
- python代理ip_python代理ip7个汇总技巧
- python给定一个整数n、判断n是否为素数_python判断所输入的任意一个正整数是否为素数的两种方法...
热门文章
- 汽车维修保养小程序,汽车维修小程序
- 牛客网的刷题之旅——2020/8/6
- android获取摄像头视频帧数据
- win10怎么设置计算机密码怎么设置,win10怎么设置开机密码?
- Leetcode每日一题1371
- OpenHarmony主干代码如何获取
- c语言选择程序设计ppt,c语言 选择型程序设计 精品.ppt
- 教你如何增强win8系统电脑声音
- python获取渲染之后的网页_使用Pyppeteer抓取渲染网页
- mysql 存储过程 compile_SQLSERVER临时表导致存储过程重编译(recompile)的一些探讨_MySQL...