题目:http://poj.org/problem?id=3177

找桥,缩点,总之都是板子;

对于每个叶子,互相连一条边即可;若最后剩下一个,则去和根节点连边;

所以叶子节点数+1再/2即答案。

代码如下:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5. int n,m,ct=,head[],reg[],c[],dc,dfn[],low[],tim,ans;
  6. bool bri[];
  7. struct N{
  8. int to,next;
  9. N(int t=,int n=):to(t),next(n) {}
  10. }edge[],dcc[];
  11. void tarjan(int x,int e)
  12. {
  13. tim++;
  14. dfn[x]=tim;
  15. low[x]=tim;
  16. for(int i=head[x];i;i=edge[i].next)
  17. {
  18. int u=edge[i].to;
  19. // if(i==(e^1))continue;
  20. if(!dfn[u])
  21. {
  22. tarjan(u,i);
  23. low[x]=min(low[x],low[u]);
  24. if(low[u]>dfn[x])bri[i]=,bri[i^]=;//!!!
  25. }
  26. else if(i!=(e^))
  27. low[x]=min(low[x],dfn[u]);
  28. }
  29. }
  30. void dfs(int x)
  31. {
  32. c[x]=dc;
  33. for(int i=head[x];i;i=edge[i].next)
  34. {
  35. int u=edge[i].to;
  36. if(!c[u]&&!bri[i])
  37. dfs(u);
  38. }
  39. }
  40. int main()
  41. {
  42. while(scanf("%d%d",&n,&m)==)
  43. {
  44. memset(head,,sizeof head);
  45. memset(reg,,sizeof reg);
  46. memset(c,,sizeof c);
  47. memset(dfn,,sizeof dfn);
  48. memset(low,,sizeof low);
  49. memset(bri,,sizeof bri);
  50. ct=;ans=;dc=;tim=;
  51. for(int i=;i<=m;i++)
  52. {
  53. int x,y;
  54. scanf("%d%d",&x,&y);
  55. edge[++ct]=N(y,head[x]);head[x]=ct;
  56. edge[++ct]=N(x,head[y]);head[y]=ct;
  57. }
  58. tarjan(,);
  59. for(int i=;i<=n;i++)
  60. {
  61. if(c[i])continue;
  62. dc++;
  63. dfs(i);
  64. }
  65. for(int i=;i<=ct;i+=)
  66. {
  67. int u=edge[i].to,v=edge[i^].to;
  68. if(c[u]==c[v])continue;
  69. reg[c[u]]++;reg[c[v]]++;
  70. }
  71. for(int i=;i<=dc;i++)
  72. if(reg[i]==)ans++;
  73. printf("%d\n",(ans+)/);
  74. }
  75. return ;
  76. }

poj3177重修道路——边双连通分量缩点的更多相关文章

  1. POJ3177 Redundant Paths(边双连通分量+缩点)

    题目大概是给一个无向连通图,问最少加几条边,使图的任意两点都至少有两条边不重复路径. 如果一个图是边双连通图,即不存在割边,那么任何两个点都满足至少有两条边不重复路径,因为假设有重复边那这条边一定就是 ...

  2. HDU 3686 Traffic Real Time Query System(双连通分量缩点+LCA)(2010 Asia Hangzhou Regional Contest)

    Problem Description City C is really a nightmare of all drivers for its traffic jams. To solve the t ...

  3. 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP)

    layout: post title: 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP) author: "luowentaoaa" catalog: true ...

  4. poj3177 && poj3352 边双连通分量缩点

    Redundant Paths Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12676   Accepted: 5368 ...

  5. poj3177(边双连通分量+缩点)

    传送门:Redundant Paths 题意:有n个牧场,Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新建多少条路,使得任何两个牧场之间至少有两条独立 ...

  6. POJ3694 Network(边双连通分量+缩点+LCA)

    题目大概是给一张图,动态加边动态求割边数. 本想着求出边双连通分量后缩点,然后构成的树用树链剖分+线段树去维护路径上的边数和..好像好难写.. 看了别人的解法,这题有更简单的算法: 在任意两点添边,那 ...

  7. POJ3352 Road Construction 双连通分量+缩点

    Road Construction Description It's almost summer time, and that means that it's almost summer constr ...

  8. HDU 4612 Warm up (边双连通分量+缩点+树的直径)

    <题目链接> 题目大意:给出一个连通图,问你在这个连通图上加一条边,使该连通图的桥的数量最小,输出最少的桥的数量. 解题分析: 首先,通过Tarjan缩点,将该图缩成一颗树,树上的每个节点 ...

  9. poj 3177 Redundant Paths(边双连通分量+缩点)

    链接:http://poj.org/problem?id=3177 题意:有n个牧场,Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新建多少条路,使得任 ...

随机推荐

  1. 【selenium】Selenium基于Python3的Web自动化测试脚本在IE上运行慢的解决方法

    阐述问题: 执行自动化脚本时,发现文本输入在IE浏览器上特别慢,这样大大降低了自动化效率 解决办法:原因是原先下载的IEDriverServer.exe为64位系统的IE,换为32位的IEDriver ...

  2. linux crontab 定时任务解析

    -----------crontab定时任务---------------------- 检查crontab工具是否安装 crontab -l 检查crontab服务是否启动 service cron ...

  3. 最简单的PHP开发环境搭建

    近期发现一个非常easy的,适合刚開始学习的人的PHP开发环境,整个环境仅仅有三样东东,PHP ,APACHE , MYSQL可是对于初学PHP的人来说,己经足够了. 假设有兴趣的话能够直接去百度PN ...

  4. leetCode 90.Subsets II(子集II) 解题思路和方法

    Given a collection of integers that might contain duplicates, nums, return all possible subsets. Not ...

  5. android菜鸟学习笔记10----Intent及<intent-filter>

    关于Bundle: 注意到Activity的onCreate()方法的签名是protected void onCreate(Bundle savedInstanceState),其参数是一个Bundl ...

  6. mac上完整卸载删除.简单粗暴无脑:androidstudio删除方案

    如果你是mac  ,你删除as ,删不干净也正常,你会发现安装的时候,前面的东西也在.配置文件在,会导致你以前的错误不想要的东西都在. 废话不多说,复制粘贴就是干!!!!~~~~~~~~ 第一步: 复 ...

  7. linux下chrome和chromedriver的安装

    1.安装chrome 用下面的命令安装最新的 Google Chrome yum install https://dl.google.com/linux/direct/google-chrome-st ...

  8. mac下编译FFmpeg-Android

    参考: [史上最傻瓜的]mac下编译FFmpeg-Android http://blog.csdn.net/ashqal/article/details/9381037

  9. Android适配API23之后权限的动态申请

    一.权限介绍 对于6.0以下的权限及在安装的时候,根据权限声明产生一个权限列表,用户只有在同意之后才能完成app的安装,造成了我们想要使用某个app,就要默默忍受其一些不必要的权限(比如是个app都要 ...

  10. Android Weekly Notes Issue #257

    Android Weekly Issue #257 May 14th, 2017 Android Weekly Issue #257 本期内容包括: Gradle中关于项目的一些设置; Android ...