1. #include<stdio.h>/*
  2. 求边双联通分量和求强连通差不多,先缩点求出叶子节点的个数
  3. */
  4. #include<string.h>
  5. #define N 5100
  6. struct node {
  7. int u,v,next;
  8. }bian[N*4];
  9. int dfn[N],low[N],head[N],index,cnt,yong,stac[N],suo[N],vis[N],top,degree[N];
  10. void init() {
  11. memset(dfn,0,sizeof(dfn));
  12. memset(low,0,sizeof(low));
  13. memset(head,-1,sizeof(head));
  14. memset(vis,0,sizeof(vis));
  15. index=0;cnt=0;yong=0;top=0;
  16. memset(degree,0,sizeof(degree));
  17. }
  18. int Min(int a,int b) {
  19. return a>b?b:a;
  20. }
  21. void addedge(int u,int v) {
  22. bian[yong].u=u;
  23. bian[yong].v=v;
  24. bian[yong].next=head[u];
  25. head[u]=yong++;
  26. }
  27. void tarjan(int u,int fa) {
  28. dfn[u]=low[u]=++index;
  29. vis[u]=1;
  30. stac[++top]=u;
  31. int i;
  32. for(i=head[u];i!=-1;i=bian[i].next) {
  33. int v=bian[i].v;
  34. if(i==(fa^1))continue;//注意优先级
  35. if(!dfn[v]) {
  36. tarjan(v,i);
  37. low[u]=Min(low[u],low[v]);
  38. }
  39. else if(vis[v])
  40. low[u]=Min(low[u],dfn[v]);
  41. }
  42. if(low[u]==dfn[u]) {
  43. cnt++;
  44. int t;
  45. do{
  46. t=stac[top--];
  47. vis[t]=0;
  48. suo[t]=cnt;
  49. }while(u!=t);
  50. }
  51. }
  52. int main() {
  53. int n,m,i,a,b;
  54. while(scanf("%d%d",&n,&m)!=EOF) {
  55. init();
  56. while(m--) {
  57. scanf("%d%d",&a,&b);
  58. addedge(a,b);
  59. addedge(b,a);
  60. }
  61. for(i=1;i<=n;i++)
  62. if(!dfn[i])
  63. tarjan(i,-1);
  64. for(i=0;i<yong;i++) {
  65. int u,v;
  66. u=bian[i].u;
  67. v=bian[i].v;
  68. if(suo[u]!=suo[v]) {
  69. degree[suo[u]]++;
  70. degree[suo[v]]++;
  71. }
  72. }
  73. int leave=0;
  74. for(i=1;i<=cnt;i++)
  75. if(degree[i]==2)
  76. leave++;
  77. printf("%d\n",(leave+1)/2);
  78. }
  79. return 0;
  80. }

poj 3177&&poj 3352加边构双联通(有重边)用tarjan 模板求的的更多相关文章

  1. POJ 3352 Road Construction(边双连通分量,桥,tarjan)

    题解转自http://blog.csdn.net/lyy289065406/article/details/6762370   文中部分思路或定义模糊,重写的红色部分为修改过的. 大致题意: 某个企业 ...

  2. 大白书中无向图的点双联通分量(BCC)模板的分析与理解

    对于一个无向图,如果任意两点至少存在两条点不重复(除起点和终点外无公共点)的路径,则这个图就是点双联通. 这个要求等价于任意两条边都存在于一个简单环(即同一个点不能在圈中出现两次)中,即内部无割点. ...

  3. HDU4738 Caocao's Bridges —— 边双联通分量 + 重边

    题目链接:https://vjudge.net/problem/HDU-4738 A network administrator manages a large network. The networ ...

  4. HDU4612 Warm up —— 边双联通分量 + 重边 + 缩点 + 树上最长路

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4612 Warm up Time Limit: 10000/5000 MS (Java/Ot ...

  5. POJ 3177 Redundant Paths (桥,边双连通分量,有重边)

    题意:给一个无向图,问需要补多少条边才可以让整个图变成[边双连通图],即任意两个点对之间的一条路径全垮掉,这两个点对仍可以通过其他路径而互通. 思路:POJ 3352的升级版,听说这个图会给重边.先看 ...

  6. 【POJ 3177】Redundant Paths(边双连通分量)

    求出每个边双连通分量缩点后的度,度为1的点即叶子节点.原图加上(leaf+1)/2条边即可变成双连通图. #include <cstdio> #include <cstring> ...

  7. 边双连通分量 jarjan (poj 3177)

    大意:给定一个无向连通图,判断至少加多少的边,才能使任意两点之间至少有两条的独立的路(没有公共的边,但可以经过同一个中间的顶点). 思路:在同一个双连通分量里的所有的点可以看做一个点,收缩后,新图是一 ...

  8. 边双联通问题求解(构造边双连通图)POJ3352(Road Construction)

    题目链接:传送门 题目大意:给你一副无向图,问至少加多少条边使图成为边双联通图 题目思路:tarjan算法加缩点,缩点后求出度数为1的叶子节点个数,需要加边数为(leaf+1)/2 #include ...

  9. POJ 3177 Redundant Paths POJ 3352 Road Construction(双连接)

    POJ 3177 Redundant Paths POJ 3352 Road Construction 题目链接 题意:两题一样的.一份代码能交.给定一个连通无向图,问加几条边能使得图变成一个双连通图 ...

随机推荐

  1. mysql数据库操作(1)

    1.mysql 数据库备份: 语法: MYSQLDUMP -uUSER -pPASS DataBase > Path 其中:USER 是用户名,PASS 是密码,DataBase 是数据库名, ...

  2. 莫队&&分块

    今天兔哥讲了一波莫队,比较有趣,先加一个链接,这是她的教程 rabbithu.cnblogs.com 这里就不详细说了,其实就是两个指针来优化的暴力.一开始排序函数有问题,没用上莫队的核心思想:把查询 ...

  3. RPC通信框架——RCF介绍

    现有的软件中用了大量的COM接口,导致无法跨平台,当然由于与Windows结合的太紧密,还有很多无法跨平台的地方.那么为了实现跨平台,支持Linux系统,以及后续的分布式,首要任务是去除COM接口. ...

  4. 关于form/input 的autocomplete="off"属性

    转自:http://blog.sina.com.cn/s/blog_b49f96a701019m0d.html 一. 有过表单设计经验的朋友肯定知道,当我们在浏览器中输入表单信息的时候,往往input ...

  5. A Reusable Aspect for Memory Allocation Checking

    The checking logic would be refactored into an aspect file, as follows: after(void * s) : (call($ ma ...

  6. Appium + python - automator定位升级版操作

    # coding:utf-8 """参考博客链接:https://www.cnblogs.com/yoyoketang/p/7843819.html"" ...

  7. mvc3结合spring.net-依赖注入

    namespace Tuzi.Models.IService { public interface IPersonService { string say(string words); } names ...

  8. Beta冲刺-星期五

    这个作业属于哪个课程  <课程的链接>            这个作业要求在哪里 <作业要求的链接> 团队名称 Three cobblers 这个作业的目标 完成项目最后的冲刺 ...

  9. 【PL/SQL】匿名块、存储过程、函数、触发器

    名词解释 子程序:PL/SQL的过程和函数统称为子程序. 匿名块:以DECLARE或BEGIN开始,每次提交都被编译.匿名块因为没有名称,所以不能在数据库中存储并且不能直接从其他PL/SQL块中调用. ...

  10. 虚拟机+linux+大杂烩

    出于项目需要,需要用到linux系统.这玩意儿平时很少用,要说体验度还是windows更人性化一些. 1.虚拟机的安装,这个没说的,百度VMware直接下最新版安装就好. 2.接着是linux系统的安 ...