poj 3352Road Construction(无向双连通分量的分解)
1 /* 2 题意:给定一个连通的无向图G,至少要添加几条边,才能使其变为强连通图(指的是边强联通)。 3 思路:利用tarjan算法找出所有的双联通分量!然后根据low[]值的不同将双联通分量 4 进行缩点,最后图形会变成一棵树!也就是添加至少多少条边使一棵树变成强联通图! 5
6 知识点:若要使得任意一棵树,在增加若干条边后,变成一个双连通图,那么 7 至少增加的边数 =( 这棵树总度数为1的结点数 + 1 )/ 2 8 9 */ 10 #include<iostream> 11 #include<cstring> 12 #include<cstdio> 13 #include<algorithm> 14 #include<vector> 15 #define N 1005 16 using namespace std; 17 vector<int>g[N]; 18 int low[N], pre[N]; 19 int deg[N]; 20 int n, m; 21 int cnt; 22 int dfsClock; 23 void dfs(int u, int fa){ 24 low[u]=pre[u]=++dfsClock; 25 int len=g[u].size(); 26 for(int i=0; i<len; ++i){ 27 int v=g[u][i]; 28 if(!pre[v]){ 29 dfs(v, u); 30 low[u]=min(low[u], low[v]); 31 } 32 else if(pre[v] < pre[u] && fa!=v) 33 low[u]=min(pre[v], low[u]); 34 } 35 } 36 37 int main(){ 38 while(scanf("%d%d", &n, &m)!=EOF){ 39 memset(pre, 0, sizeof(pre)); 40 memset(deg, 0, sizeof(deg)); 41 while(m--){ 42 int u, v; 43 scanf("%d%d", &u, &v); 44 g[u].push_back(v); 45 g[v].push_back(u); 46 } 47 cnt=0; 48 dfsClock=0; 49 dfs(1, -1); 50 for(int i=1; i<=n; ++i){ 51 int len=g[i].size(); 52 for(int j=0; j<len; ++j){ 53 int v=g[i][j]; 54 if(low[i]!=low[v]) 55 ++deg[low[i]]; 56 } 57 } 58 for(int i=1; i<=n; ++i) 59 if(deg[i]==1) 60 ++cnt; 61 printf("%d\n", (cnt+1)/2); 62 for(int i=1; i<=n; ++i) 63 g[i].clear(); 64 } 65 return 0; 66 }
转载于:https://www.cnblogs.com/hujunzheng/p/3909568.html
poj 3352Road Construction(无向双连通分量的分解)相关推荐
- Redundant Paths POJ - 3177(tarjan+边双连通分量)
题意: 有n个牧场,要求从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新建多少条路,使得任何两个牧场之间至少有两条独立的路.两条独立的路是指:没有公共边的路,但可以经过 ...
- POJ 1523 SPF (割点 点双连通分量)
题意:求出割点以及除去割点后的连通分量的数量(附带求出了点双连通分量(块)) [求割点]对图深度优先搜索,定义DFS(u)为u在搜索树(以下简称为树)中被遍历到的次序号.定义Low(u)为u或u的子树 ...
- 【POJ - 3352】Road Construction(Tarjan,边双连通分量)
题干: It's almost summer time, and that means that it's almost summer construction time! This year, th ...
- Tarjan算法求解桥和边双连通分量(附POJ 3352 Road Construction解题报告)
http://blog.csdn.net/geniusluzh/article/details/6619575 在说Tarjan算法解决桥和边双连通分量问题之前我们先来回顾一下Tarjan算法是如何求 ...
- POJ 3352 无向图边双连通分量,缩点,无重边
为什么写这道题还是因为昨天多校的第二题,是道图论,HDU 4612.当时拿到题目的时候就知道是道模版题,但是苦于图论太弱.模版都太水,居然找不到.虽然比赛的时候最后水过了,但是那个模版看的还是一知半解 ...
- poj 3352 Road Construction(边-双连通分量)
题意:给定一个连通的无向图G,至少要添加几条边,才能使其变为双连通图. 解题思路: 显然,当图G存在桥(割边)的时候,它必定不是双连通的.桥的两个端点必定分别属于图G的两个[边双连通分量](注意不是点 ...
- POJ 3694 Network ★(边双连通分量+并查集缩点+LCA)
[题意]一个无向图可以有重边,下面q个操作,每次在两个点间连接一条有向边,每次连接后整个无向图还剩下多少桥(每次回答是在上一次连边的基础之上) [分析]好题,做完后涨了很多姿势~ 普通做法当然就是每加 ...
- 【POJ 2942】Knights of the Round Table(点双连通分量,二分图染色)
圆桌会议必须满足:奇数个人参与,相邻的不能是敌人(敌人关系是无向边). 求无论如何都不能参加会议的骑士个数.只需求哪些骑士是可以参加的. 我们求原图的补图:只要不是敌人的两个人就连边. 在补图的一个奇 ...
- 【POJ - 3177】Redundant Paths(边双连通分量,去重边)
题干: In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1.. ...
最新文章
- 这是我见过最卡通的 Python 算法了,通俗易懂
- Scanner对象及其获取数据出现小问题和解决方案
- python 如何遍历文件夹下所有图片/文件? os.walk() os.listdir()
- leetcode 394. Decode String | 394. 字符串解码(用栈做表达式转换)
- SAP Spartacus B2B 页面 info icon 设计 - 版本1.0
- 软件测试人员:如何优秀的提Bug?
- jQuery WeUI 上传
- LeetCode 1496. 判断路径是否相交(set)
- MySQL流浪记(三)—— Linux安装MySQL数据库5.7.30(亲测有效3分钟即可)
- matplotlib是python第三方库吗_python第三方库matplotlib
- 配置接口IP地址并通过默认路由配置实现全网互通。
- springboot 配置文件-yaml的用法
- xcode 把cocos2d-x 以源码的形式包含进自己的项目适合, 性能分析问题的错误
- S3C2440PWM 定时器
- c语言 误差函数erf代码,高斯(余补)误差函数erf和erfc
- 华硕鹰眼ZenFone Zoom推动潮流:比肩专业相机几率几何?
- 吉大网络教育护理学专升本病例分析
- matlab做机器人运动轨迹,matlab机器人工具箱学习笔记——机器人的运动轨迹
- [golang gin框架] 27.Gin 商城项目-购物车
- Ubuntu子系统折腾记
热门文章
- quercus mysql_让PHP运行在Glassfish中:quercus配置
- android 高度上分权重,Android LinearLayout weight权重使用
- Elasticsearch7.15.2 基础概念和基础语法
- Elasticsearch7.15.2 mysql8.0.26 logstash-input-jdbc 数据增量索引构建
- springboot 通过url访问本地文件
- flowable实战(九)flowable数据库表中流程实例、活动实例、任务实例三者之间关系分析
- java.lang.reflect.InvocationTargetException 的惨痛教训
- wxpython富文本_去除富文本编辑器中的标签
- python期末考试重点_如何应付大学的python考试而不至于挂科?
- mysql 全文索引 权重_MySQL中的全文索引