1. /*这道题是没有重边的,求加几条边构成双联通,求边联通分量,先求出桥然后缩点,成一个棵树
  2. 找叶子节点的个数*/
  3. #include<stdio.h>
  4. #include<string.h>
  5. #define N 1100
  6. int top[N],ma[N][N],dfn[N],low[N],index,f[N][N],n;
  7. int Min(int a,int b) {
  8. return a>b?b:a;
  9. }
  10. void tarjan(int u,int pre) {//
  11. dfn[u]=low[u]=++index;
  12. int i;
  13. for(i=0;i<top[u];i++) {
  14. int v=ma[u][i];
  15. if(v==pre)continue;
  16. if(!dfn[v]) {
  17. tarjan(v,u);
  18. low[u]=Min(low[u],low[v]);//
  19. if(low[v]>dfn[u])//标记桥
  20. f[u][v]=f[v][u]=1;
  21. }
  22. else
  23. low[u]=Min(low[u],dfn[v]);
  24. }
  25. }
  26. int cnt,c[N];
  27. void dfs(int u,int fa) {//缩点
  28. int i;
  29. c[u]=cnt;//不能放到循环里面,
  30. for(i=0;i<top[u];i++) {
  31. int v=ma[u][i];
  32. if(!f[u][v]&&!c[v]&&v!=fa)//桥不能走,不能回头路,没有被缩过
  33. dfs(v,u);
  34. }
  35. return ;
  36. }
  37. int degree[N];
  38. int slove() {
  39. int i,j,b;
  40. cnt=1;
  41. memset(c,0,sizeof(c));
  42. for(i=1;i<=n;i++)//缩点
  43. if(!c[i]) {
  44. dfs(i,-1);
  45. cnt++;
  46. }
  47. memset(degree,0,sizeof(degree));
  48. for(i=1;i<=n;i++)
  49. for(j=0;j<top[i];j++){
  50. b=ma[i][j];
  51. if(c[i]!=c[b]) {//所有边中
  52. degree[c[i]]++;
  53. degree[c[b]]++;//记录度数
  54. }
  55. }
  56. int leave=0;
  57. for(i=1;i<cnt;i++) {//度数为一的叶子节点,因为为双向边
  58. if(degree[i]==2)
  59. leave++;
  60. }
  61. return (leave+1)/2;
  62. }
  63. int main() {
  64. int m,i,a,b,ans;
  65. while(scanf("%d%d",&n,&m)!=EOF) {
  66. memset(top,0,sizeof(top));
  67. memset(dfn,0,sizeof(dfn));
  68. memset(low,0,sizeof(low));
  69. memset(f,0,sizeof(f));
  70. index=0;
  71. while(m--){
  72. scanf("%d%d",&a,&b);
  73. ma[a][top[a]++]=b;//容器
  74. ma[b][top[b]++]=a;
  75. }
  76. for(i=1;i<=n;i++)
  77. if(!dfn[i])
  78. tarjan(i,-1);
  79. ans=slove();
  80. printf("%d\n",ans);
  81. }
  82. return 0;
  83. }

hdu 3352 求边双联通分量模板题(容器)的更多相关文章

  1. poj 3177&&3352 求边双联通分量,先求桥,然后求分量( 临界表代码)

    /*这道题是没有重边的,求加几条边构成双联通,求边联通分量,先求出桥然后缩点,成一个棵树 找叶子节点的个数*/ #include<stdio.h>//用容器写在3177这个题上会超内存,但 ...

  2. POJ 2942 Knights of the Round Table 补图+tarjan求点双联通分量+二分图染色+debug

    题面还好,就不描述了 重点说题解: 由于仇恨关系不好处理,所以可以搞补图存不仇恨关系, 如果一个桌子上面的人能坐到一起,显然他们满足能构成一个环 所以跑点双联通分量 求点双联通分量我用的是向栈中pus ...

  3. 【UVA10972】RevolC FaeLoN (求边双联通分量)

    题意: 给你一个无向图,要求把所有无向边改成有向边,并且添加最少的有向边,使得新的有向图强联通. 分析: 这题的解法还是很好想的.先用边双联通分量缩点,然后找新图中入度为0和为1的点,入度为0则ans ...

  4. 洛谷P2860 [USACO06JAN]冗余路径Redundant Paths(tarjan求边双联通分量)

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

  5. POJ3177 & 求边双联通分量

    题意: 给一张无向图,求加多少边使原图任意两点边双联通. SOL: 一个不会写边双点双强联通的傻逼. 一个结论:把一棵树变成满足条件的图需要加的边使入度为1的点数+1除以2.------>就是树 ...

  6. POJ 3352 Road Construction 双联通分量 难度:1

    http://poj.org/problem?id=3352 有重边的话重边就不被包含在双连通里了 割点不一定连着割边,因为这个图不一定是点连通,所以可能出现反而多增加了双连通分量数的可能 必须要用割 ...

  7. cf999E (强联通分量模板题)

    给出n个点m条边的有向图,问至少添加多少条边使得任何点都可以从s点出发可达 #include<bits/stdc++.h> #define forn(i, n) for (int i = ...

  8. ARC062 - F. Painting Graphs with AtCoDeer (Polya+点双联通分量)

    似乎好久都没写博客了....赶快来补一篇 题意 给你一个 \(n\) 个点 , 没有重边和自环的图 . 有 \(m\) 条边 , 每条边可以染 \(1 \to k\) 中的一种颜色 . 对于任意一个简 ...

  9. [J]computer network tarjan边双联通分量+树的直径

    https://odzkskevi.qnssl.com/b660f16d70db1969261cd8b11235ec99?v=1537580031 [2012-2013 ACM Central Reg ...

随机推荐

  1. oc44--多对象内存管理

    // Room.h #import <Foundation/Foundation.h> @interface Room : NSObject @property int no;// 房间号 ...

  2. android recovery 主系统代码分析【转】

    本文转载自:http://blog.csdn.net/andyhuabing/article/details/9248713 阅读完上一篇文章: http://blog.csdn.net/andyhu ...

  3. XHprof 使用 (转)

    原文地址:http://blog.csdn.net/maitiandaozi/article/details/8896293 XHProf是facebook开源出来的一个php轻量级的性能分析工具,跟 ...

  4. JS网页播放声音实现代码兼容各种浏览器

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 【专题】概率期望DP

    11.22:保持更新状态:主要发一些相关的题目和个人理解 (P.S.如果觉得简单,可以直接看后面的题目) upd 11.30 更完了 [NO.1] UVA12230 Crossing Rivers  ...

  6. python 12:list(range(...)) (转化参数列表)

    numbers = list(range(1,11)) #把范围产生的数字串转化为列表储存 print(numbers) 运行结果应该是: [1,2,3,4,5,6,7,8,9,10]

  7. Elasticsearch之curl删除索引库

    关于curl创建索引库的介绍,请移步 Elasticsearch之curl创建索引库 [hadoop@djt002 elasticsearch-2.4.3]$ curl -XPUT 'http://1 ...

  8. [转载]cocos2d-触摸分发原理

    本文由泰然翻译组组长 TXX_糖炒小虾 原创,版权所有,转载请注明出处并通知作者和泰然! 原作 http://www.ityran.com/archives/1326/comment-page-1 触 ...

  9. 【SQL】约束

    1. 添加约束 1)使用ALTER TABLE语句 •添加或删除约束,不会修改其结构 •启用和禁用约束 •通过使用MODIFY子句添加NOTNULL约束 ALTER TABLE <table_n ...

  10. redis-linux

    redis3.0.4 server版本 jedis-2.7.2.jar spring-data-redis-1.6.0.RELEASE.jar commons-pool2-2.3.jar spring ...