题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4738

  题意:在有重边的无向图中,求权值最小的桥。

  注意trick就好了,ans为0时输出1,总要有一个人去丢炸弹吧。。。

  1. //STATUS:C++_AC_62MS_8144KB
  2. #include <functional>
  3. #include <algorithm>
  4. #include <iostream>
  5. //#include <ext/rope>
  6. #include <fstream>
  7. #include <sstream>
  8. #include <iomanip>
  9. #include <numeric>
  10. #include <cstring>
  11. #include <cassert>
  12. #include <cstdio>
  13. #include <string>
  14. #include <vector>
  15. #include <bitset>
  16. #include <queue>
  17. #include <stack>
  18. #include <cmath>
  19. #include <ctime>
  20. #include <list>
  21. #include <set>
  22. #include <map>
  23. using namespace std;
  24. #pragma comment(linker,"/STACK:102400000,102400000")
  25. //using namespace __gnu_cxx;
  26. //define
  27. #define pii pair<int,int>
  28. #define mem(a,b) memset(a,b,sizeof(a))
  29. #define lson l,mid,rt<<1
  30. #define rson mid+1,r,rt<<1|1
  31. #define PI acos(-1.0)
  32. //typedef
  33. typedef __int64 LL;
  34. typedef unsigned __int64 ULL;
  35. //const
  36. const int N=;
  37. const int INF=0x3f3f3f3f;
  38. const int MOD=,STA=;
  39. const LL LNF=1LL<<;
  40. const double EPS=1e-;
  41. const double OO=1e60;
  42. const int dx[]={-,,,};
  43. const int dy[]={,,,-};
  44. const int day[]={,,,,,,,,,,,,};
  45. //Daily Use ...
  46. inline int sign(double x){return (x>EPS)-(x<-EPS);}
  47. template<class T> T gcd(T a,T b){return b?gcd(b,a%b):a;}
  48. template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
  49. template<class T> inline T lcm(T a,T b,T d){return a/d*b;}
  50. template<class T> inline T Min(T a,T b){return a<b?a:b;}
  51. template<class T> inline T Max(T a,T b){return a>b?a:b;}
  52. template<class T> inline T Min(T a,T b,T c){return min(min(a, b),c);}
  53. template<class T> inline T Max(T a,T b,T c){return max(max(a, b),c);}
  54. template<class T> inline T Min(T a,T b,T c,T d){return min(min(a, b),min(c,d));}
  55. template<class T> inline T Max(T a,T b,T c,T d){return max(max(a, b),max(c,d));}
  56. //End
  57.  
  58. /* Edge-Biconnected Component(可以处理重边)
  59. iscut[]为割边集
  60. bccno[]为双连通点集,保存为编号 */
  61. struct Edge{
  62. int u,v,w;
  63. }e[*N*N];
  64. bool iscut[*N*N];
  65. int first[N],next[*N*N],pre[N],low[N],bccno[N];
  66. int n,m,mt,bcnt,dfs_clock;
  67. stack<int> s;
  68.  
  69. void adde(int a,int b,int c)
  70. {
  71. e[mt].u=a;e[mt].v=b;e[mt].w=c;
  72. next[mt]=first[a];first[a]=mt++;
  73. e[mt].u=b;e[mt].v=a;e[mt].w=c;
  74. next[mt]=first[b];first[b]=mt++;
  75. }
  76.  
  77. void dfs(int u,int fa)
  78. {
  79. int i,v;
  80. pre[u]=low[u]=++dfs_clock;
  81. s.push(u);
  82. int cnt=;
  83. for(i=first[u];i!=-;i=next[i]){
  84. v=e[i].v;
  85. if(!pre[v]){
  86. dfs(v,u);
  87. low[u]=Min(low[u],low[v]);
  88. if(low[v]>pre[u])iscut[i]=true; //存在割边
  89. }
  90. else if(fa==v){ //反向边更新
  91. if(cnt)low[u]=Min(low[u],pre[v]);
  92. cnt++;
  93. }
  94. else low[u]=Min(low[u],pre[v]);
  95. }
  96. if(low[u]==pre[u]){ //充分必要条件
  97. int x=-;
  98. bcnt++;
  99. while(x!=u){
  100. x=s.top();s.pop();
  101. bccno[x]=bcnt;
  102. }
  103. }
  104. }
  105.  
  106. int find_bcc()
  107. {
  108. int i,cnt=;
  109. bcnt=dfs_clock=;
  110. mem(pre,);mem(bccno,);mem(iscut,);
  111. for(i=;i<=n;i++){
  112. if(!pre[i]){cnt++;dfs(i,-);}
  113. }
  114. return cnt;
  115. }
  116.  
  117. int main(){
  118. // freopen("in.txt","r",stdin);
  119. int i,j,a,b,c,ans,t;
  120. while(~scanf("%d%d",&n,&m) && (n||m))
  121. {
  122. mem(first,-);mt=;
  123. for(i=;i<m;i++){
  124. scanf("%d%d%d",&a,&b,&c);
  125. adde(a,b,c);
  126. }
  127.  
  128. t=find_bcc();
  129. if(t>){
  130. printf("0\n");
  131. continue;
  132. }
  133.  
  134. ans=INF;
  135. for(i=;i<mt;i++){
  136. if(iscut[i])ans=Min(ans,e[i].w);
  137. }
  138. printf("%d\n",ans==INF?-:(ans?ans:));
  139. }
  140. return ;
  141. }

HDU-4738 Caocao's Bridges 边联通分量的更多相关文章

  1. Hdu 4738 Caocao's Bridges (连通图+桥)

    题目链接: Hdu 4738 Caocao's Bridges 题目描述: 有n个岛屿,m个桥,问是否可以去掉一个花费最小的桥,使得岛屿边的不连通? 解题思路: 去掉一个边使得岛屿不连通,那么去掉的这 ...

  2. HDU 4738 Caocao's Bridges(Tarjan求桥+重边判断)

    Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. HDU 4738——Caocao's Bridges——————【求割边/桥的最小权值】

     Caocao's Bridges Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  4. hdu 4738 Caocao's Bridges 图--桥的判断模板

    Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. HDU 4738 Caocao's Bridges

    Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. HDU 4738 Caocao's Bridges (2013杭州网络赛1001题,连通图,求桥)

    Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  7. HDU——4738 Caocao's Bridges

    Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  8. HDU 4738 Caocao's Bridges ——(找桥,求联通块)

    题意:给你一个无向图,给你一个炸弹去炸掉一条边,使得整个图不再联通,你需要派人去安置炸弹,且派去的人至少要比这条边上的人多.问至少要派去多少个,如果没法完成,就输出-1. 分析:如果这个图是已经是多个 ...

  9. hdu 4738 Caocao's Bridges (tarjan求桥)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4738 题目大意:给一些点,用一些边把这些点相连,每一条边上有一个权值.现在要你破坏任意一个边(要付出相 ...

  10. hdu 4738 Caocao's Bridges(桥的最小权值+去重)

    http://acm.hdu.edu.cn/showproblem.php?pid=4738 题目大意:曹操有一些岛屿被桥连接,每座都有士兵把守,周瑜想把这些岛屿分成两部分,但他只能炸毁一条桥,问最少 ...

随机推荐

  1. JDBC学习总结(五)

    取得数据库连接是件耗时间及资源的动作,尽量利用已打开的连接,也就是重复利用取得的Connection实例,是改善数据库连接性能的一个方式,而采用连接池是基本做法.由于取得Connection的方式根据 ...

  2. jquery.post用法

    使用ajax在前端验证是否执行某个操作 jquery.post参数为 url,[data],[callback],[type] url:发送请求地址. data:待发送 Key/value 参数. c ...

  3. 车牌识别LPR(三)-- LPR系统整体结构

    第三篇:系统的整体架构 LPR系统大体上可由图像采集系统,图像处理系统,数据库管理系统三个子系统组成.它综合了通讯.信息.控制.传感.计算机等各种先进技术,构成一个智能电子系统. 图像采集系统:图像采 ...

  4. LTDFZ

    开关稳压器

  5. ASP.NET MVC从客户端中检测到有潜在危险的 Request.Form 值

    ASP.NET MVC4(Razor)从客户端中检测到有潜在危险的 Request.Form 值 “/”应用程序中的服务器错误. 从客户端(Content=" sdfdddd ...&quo ...

  6. directdraw显示yuv视频,出现屏保时,yuv显示不出来,表面丢失

    原因是: DDrawSurface 丢失, DDraw表面在很多情况下都会丢失(如:启动其他全屏独占程序,屏保,或锁屏时), 表面丢失其实就是表面所使用的内存或显存被DirectDraw系统释放, 分 ...

  7. 动态加载so文件

    在开发过程中,经常会用到第三方库,比如地图.视频.文档编辑.图表之类.依赖这些库,需要添加其SDK,有时需要用到jni层的So文件,比如百度地图等. 那么问题来了,如果两个不同的库之间的so文件发生冲 ...

  8. javascript一些有用但又不常用的特性

    1.onclick="save();return false;" 取消“浏览器默认行为”.     比如一个链接     <a href="http://zhida ...

  9. js时间日期转时间戳

    var contractstarttimea='2016-01-01'; var contractendtimea='2016-05-01'; var contractstart = Date.par ...

  10. PL/Sql 中创建、调试、调用存储过程

    存储过程的详细建立方法 1.先建存储过程 左边的浏览窗口选择 procedures ,会列出所有的存储过程,右击文件夹procedures单击菜单"new",弹出 template ...