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(无向双连通分量的分解)相关推荐

  1. Redundant Paths POJ - 3177(tarjan+边双连通分量)

    题意: 有n个牧场,要求从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新建多少条路,使得任何两个牧场之间至少有两条独立的路.两条独立的路是指:没有公共边的路,但可以经过 ...

  2. POJ 1523 SPF (割点 点双连通分量)

    题意:求出割点以及除去割点后的连通分量的数量(附带求出了点双连通分量(块)) [求割点]对图深度优先搜索,定义DFS(u)为u在搜索树(以下简称为树)中被遍历到的次序号.定义Low(u)为u或u的子树 ...

  3. 【POJ - 3352】Road Construction(Tarjan,边双连通分量)

    题干: It's almost summer time, and that means that it's almost summer construction time! This year, th ...

  4. Tarjan算法求解桥和边双连通分量(附POJ 3352 Road Construction解题报告)

    http://blog.csdn.net/geniusluzh/article/details/6619575 在说Tarjan算法解决桥和边双连通分量问题之前我们先来回顾一下Tarjan算法是如何求 ...

  5. POJ 3352 无向图边双连通分量,缩点,无重边

    为什么写这道题还是因为昨天多校的第二题,是道图论,HDU 4612.当时拿到题目的时候就知道是道模版题,但是苦于图论太弱.模版都太水,居然找不到.虽然比赛的时候最后水过了,但是那个模版看的还是一知半解 ...

  6. poj 3352 Road Construction(边-双连通分量)

    题意:给定一个连通的无向图G,至少要添加几条边,才能使其变为双连通图. 解题思路: 显然,当图G存在桥(割边)的时候,它必定不是双连通的.桥的两个端点必定分别属于图G的两个[边双连通分量](注意不是点 ...

  7. POJ 3694 Network ★(边双连通分量+并查集缩点+LCA)

    [题意]一个无向图可以有重边,下面q个操作,每次在两个点间连接一条有向边,每次连接后整个无向图还剩下多少桥(每次回答是在上一次连边的基础之上) [分析]好题,做完后涨了很多姿势~ 普通做法当然就是每加 ...

  8. 【POJ 2942】Knights of the Round Table(点双连通分量,二分图染色)

    圆桌会议必须满足:奇数个人参与,相邻的不能是敌人(敌人关系是无向边). 求无论如何都不能参加会议的骑士个数.只需求哪些骑士是可以参加的. 我们求原图的补图:只要不是敌人的两个人就连边. 在补图的一个奇 ...

  9. 【POJ - 3177】Redundant Paths(边双连通分量,去重边)

    题干: In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1.. ...

最新文章

  1. 这是我见过最卡通的 Python 算法了,通俗易懂
  2. Scanner对象及其获取数据出现小问题和解决方案
  3. python 如何遍历文件夹下所有图片/文件? os.walk() os.listdir()
  4. leetcode 394. Decode String | 394. 字符串解码(用栈做表达式转换)
  5. SAP Spartacus B2B 页面 info icon 设计 - 版本1.0
  6. 软件测试人员:如何优秀的提Bug?
  7. jQuery WeUI 上传
  8. LeetCode 1496. 判断路径是否相交(set)
  9. MySQL流浪记(三)—— Linux安装MySQL数据库5.7.30(亲测有效3分钟即可)
  10. matplotlib是python第三方库吗_python第三方库matplotlib
  11. 配置接口IP地址并通过默认路由配置实现全网互通。
  12. springboot 配置文件-yaml的用法
  13. xcode 把cocos2d-x 以源码的形式包含进自己的项目适合, 性能分析问题的错误
  14. S3C2440PWM 定时器
  15. c语言 误差函数erf代码,高斯(余补)误差函数erf和erfc
  16. 华硕鹰眼ZenFone Zoom推动潮流:比肩专业相机几率几何?
  17. 吉大网络教育护理学专升本病例分析
  18. matlab做机器人运动轨迹,matlab机器人工具箱学习笔记——机器人的运动轨迹
  19. [golang gin框架] 27.Gin 商城项目-购物车
  20. Ubuntu子系统折腾记

热门文章

  1. quercus mysql_让PHP运行在Glassfish中:quercus配置
  2. android 高度上分权重,Android LinearLayout weight权重使用
  3. Elasticsearch7.15.2 基础概念和基础语法
  4. Elasticsearch7.15.2 mysql8.0.26 logstash-input-jdbc 数据增量索引构建
  5. springboot 通过url访问本地文件
  6. flowable实战(九)flowable数据库表中流程实例、活动实例、任务实例三者之间关系分析
  7. java.lang.reflect.InvocationTargetException 的惨痛教训
  8. wxpython富文本_去除富文本编辑器中的标签
  9. python期末考试重点_如何应付大学的python考试而不至于挂科?
  10. mysql 全文索引 权重_MySQL中的全文索引