和求割点类似,只要把>=改成>即可。这里想解释一下的是,无向图没有重边,怎么可以使得low[v]=dfn[u]呢?只要它们之间再来一个点即可。

  总感觉图论要很仔细地想啊- -一不小心就弄混了。。

  另外从这题发现,代码还是写成模块化比较好,比如solve一个函数,init一个函数等等,这样可以避免很多东西忘记写,比方说dfn或者G的清空等等。。

  代码如下:

  1. #include <stdio.h>
  2. #include <stack>
  3. #include <algorithm>
  4. #include <string.h>
  5. #include <vector>
  6. using namespace std;
  7.  
  8. const int N = +;
  9.  
  10. stack<int> S;
  11. int scc_cnt;
  12. int dfs_clock;
  13. int dfn[N];
  14. int low[N];
  15. int iscut[N];
  16. vector<int> G[N];
  17. int n;
  18.  
  19. struct bridge
  20. {
  21. int u,v;
  22. void clear()
  23. {
  24. if(this->u > this->v) swap(this->u,this->v);
  25. }
  26. bool operator < (const bridge & A) const
  27. {
  28. return u==A.u ? v<A.v : u<A.u;
  29. }
  30. };
  31. vector<bridge> ans;
  32.  
  33. void dfs(int u,int fa)
  34. {
  35. dfn[u]=low[u]=++dfs_clock;
  36. for(int i=;i<G[u].size();i++)
  37. {
  38. int v = G[u][i];
  39. if(!dfn[v])
  40. {
  41. dfs(v,u);
  42. low[u]=min(low[u],low[v]);
  43. if(low[v]>dfn[u])
  44. {
  45. bridge bri = (bridge){u,v};
  46. bri.clear();
  47. ans.push_back(bri);
  48. }
  49. }
  50. else if(dfn[v]<dfn[u] && v!=fa)
  51. {
  52. low[u]=min(low[u],dfn[v]);
  53. }
  54. }
  55. }
  56.  
  57. void init()
  58. {
  59. for(int i=;i<n;i++) G[i].clear();
  60. memset(dfn,,sizeof(dfn));
  61. dfs_clock=;
  62. ans.clear();
  63. }
  64.  
  65. void solve()
  66. {
  67. for(int i=;i<n;i++)
  68. {
  69. if(!dfn[i]) dfs(i,-);
  70. }
  71.  
  72. sort(ans.begin(),ans.end());
  73. printf("%d critical links\n",ans.size());
  74. for(int i=;i<ans.size();i++)
  75. {
  76. printf("%d - %d\n",ans[i].u,ans[i].v);
  77. }
  78. puts("");
  79. }
  80.  
  81. int main()
  82. {
  83. while(scanf("%d",&n)==)
  84. {
  85. init();
  86.  
  87. for(int i=;i<=n;i++)
  88. {
  89. int u,num;
  90. scanf("%d (%d)",&u,&num);
  91.  
  92. while(num--)
  93. {
  94. int v;
  95. scanf("%d",&v);
  96. G[u].push_back(v);
  97. G[v].push_back(u);
  98. }
  99. }
  100. solve();
  101. }
  102. return ;
  103. }

UVA 796 Critical Links —— (求割边(桥))的更多相关文章

  1. Uva 796 Critical Links (割边+排序)

    题目链接: Uva 796 Critical Links 题目描述: 题目中给出一个有可能不连通的无向图,求出这个图的桥,并且把桥按照起点升序输出(还有啊,还有啊,每个桥的起点要比终点靠前啊),这个题 ...

  2. uva 796 Critical Links(无向图求桥)

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  3. UVA 796 Critical Links(Tarjan求桥)

    题目是PDF就没截图了 这题似乎没有重边,若有重边的话这两点任意一条边都不是桥,跟求割点类似的原理 代码: #include <stdio.h> #include <bits/std ...

  4. UVA 796 - Critical Links (求桥)

    Critical Links  In a computer network a link L, which interconnects two servers, is considered criti ...

  5. UVA 796 Critical Links(无向图求桥)

    题目大意:给你一个网络要求这里面的桥. 输入数据: n 个点 点的编号  (与这个点相连的点的个数m)  依次是m个点的   输入到文件结束. 桥输出的时候需要排序   知识汇总: 桥:   无向连通 ...

  6. UVA 796 Critical Links(模板题)(无向图求桥)

    <题目链接> 题目大意: 无向连通图求桥,并将桥按顺序输出. 解题分析: 无向图求桥的模板题,下面用了kuangbin的模板. #include <cstdio> #inclu ...

  7. UVA 796 Critical Links (tarjan算法求割边)

    这是在kuangbin的题目里看到的,不得不吐槽一下,题目中居然没给出数据范围,还是我自己猜的-本来是一道挺裸的题,但是我wa了好多次,原因就是这里面有两个坑点,1重边特判,2输出时左边必须比右边小. ...

  8. UVA 796 - Critical Links 无向图字典序输出桥

    题目:传送门 题意:给你一个无向图,你需要找出里面的桥,并把所有桥按字典序输出 这一道题就是用无向图求桥的模板就可以了. 我一直错就是因为我在输入路径的时候少考虑一点 错误代码+原因: 1 #incl ...

  9. Uva 796 Critical Links 找桥

    这个题很简单,但是输入有毒,用字符串的我一直RE 然后换成这样瞬间AC #include <stdio.h> #include <string.h> #include < ...

随机推荐

  1. redis常用api

    一.全局命令 1.keys *            //查看所有键 2.dbsize           //键总数,如果存在大量键,线上禁止使用此命令 3.exists key     //存在返 ...

  2. Nginx用法详解

    nginx作为一个高性能的web服务器,想必大家垂涎已久,蠢蠢欲动,想学习一番了吧,语法不多说,网上一大堆.下面博主就nginx的非常常用的几个功能做一些讲述和分析,学会了这几个功能,平常的开发和部署 ...

  3. Django rest-framework框架-序列化

    序列化: 第一版: class RolesView(APIView): def get(self,request,*args,**kwargs): roles = models.Role.object ...

  4. asp.net ListView控件的简单实用和配置

    1 web窗体界面代码 ItemType:控件要绑定的实体模型 SelectMethod:控件获取实体集合的后台方法 DataKeyNames:实体的主键 UpdateProduct:设置跟新的方法 ...

  5. Lab2 Report

    1.安装SeleniumIDE插件 a)安装Firefox 17.0 - 56.*版本的firefox,下载地址为:http://ftp.mozilla.org/pub/firefox/release ...

  6. host缓存,浏览器缓存---解决host缓存带来的伤

    1.缓存 缓存,对应工程师来讲简直太熟悉了,太方便了,省略到资源或数据的获取方式,直接缓存到离用户访问最快的地方,也降低服务器的压力,比如: (1)静态文件获取 服务器->cdn->本地磁 ...

  7. 如何使用Marketing Cloud的扩展字段作为搜索条件进行搜索

    需求:我在Marketing Cloud的contact模型上用custom field这个应用创建了一个Extension field,名称为微信ID. 现在客户的需求是使用这个字段作为过滤条件进行 ...

  8. 17.SpringMVC核心技术-拦截器

    SpringMVC 中的 Interceptor 拦截器是非常重要和相当有用的,它的主要作用是拦截指定 的用户请求, 并进行相应的预处理与后处理.其拦截的时间点在“处理器映射器根据用户提 交的请求映射 ...

  9. element 文件上传大小控制

    1.页面代码 <el-upload :show-file-list="false" class="upload-demo" :before-upload= ...

  10. ngnix反向代理后获取用户真实ip及https配置

    server {listen 80;listen 802;server_name test111.xxxx.com 118.24.122.101; gzip on;gzip_min_length 10 ...