Caocao's Bridges

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 8476    Accepted Submission(s): 2604

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

Description:

Caocao was defeated by Zhuge Liang and Zhou Yu in the battle of Chibi. But he wouldn't give up. Caocao's army still was not good at water battles, so he came up with another idea. He built many islands in the Changjiang river, and based on those islands, Caocao's army could easily attack Zhou Yu's troop. Caocao also built bridges connecting islands. If all islands were connected by bridges, Caocao's army could be deployed very conveniently among those islands. Zhou Yu couldn't stand with that, so he wanted to destroy some Caocao's bridges so one or more islands would be seperated from other islands. But Zhou Yu had only one bomb which was left by Zhuge Liang, so he could only destroy one bridge. Zhou Yu must send someone carrying the bomb to destroy the bridge. There might be guards on bridges. The soldier number of the bombing team couldn't be less than the guard number of a bridge, or the mission would fail. Please figure out as least how many soldiers Zhou Yu have to sent to complete the island seperating mission.

Input:

There are no more than 12 test cases.

In each test case:

The first line contains two integers, N and M, meaning that there are N islands and M bridges. All the islands are numbered from 1 to N. ( 2 <= N <= 1000, 0 < M <= N2 )

Next M lines describes M bridges. Each line contains three integers U,V and W, meaning that there is a bridge connecting island U and island V, and there are W guards on that bridge. ( U ≠ V and 0 <= W <= 10,000 )

The input ends with N = 0 and M = 0.

Output:

For each test case, print the minimum soldier number Zhou Yu had to send to complete the mission. If Zhou Yu couldn't succeed any way, print -1 instead.

Sample Input:

  1. 3 3
  2. 1 2 7
  3. 2 3 4
  4. 3 1 4
  5. 3 2
  6. 1 2 7
  7. 2 3 4
  8. 0 0

Sample Output:

  1. -1
  2. 4

题意:

给出一个无向图,然后每条边都有边权,求所有桥的最小边权。若不存在桥,输出-1。

题解:

这个就直接dfs一下,利用时间戳来求桥就行了。但是注意如果边权为0的时候,答案为1。。因为至少需要一个人去搬炸弹。

代码如下:

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. #include <iostream>
  5. #include <queue>
  6. using namespace std;
  7. typedef long long ll;
  8. const int N = ;
  9. int n,m,tot;
  10. int head[N];
  11. struct Edge{
  12. int u,v,next,w;
  13. }e[N*N<<];
  14. int T;
  15. int dfn[N],low[N],cut[N*N];
  16. void adde(int u,int v,int w){
  17. e[tot].u=u;e[tot].v=v;e[tot].w=w;e[tot].next=head[u];head[u]=tot++;
  18. }
  19. void init(){
  20. T=;tot=;
  21. memset(head,-,sizeof(head));
  22. memset(cut,,sizeof(cut));
  23. memset(dfn,,sizeof(dfn));
  24. }
  25. void Tarjan(int u,int pre){
  26. dfn[u]=low[u]=++T;
  27. int k = ;
  28. for(int i=head[u];i!=-;i=e[i].next){
  29. int v=e[i].v;
  30. if(v==pre &&!k){
  31. k=;
  32. continue ;
  33. }
  34. if(!dfn[v]){
  35. Tarjan(v,u);
  36. low[u]=min(low[u],low[v]);
  37. }else{
  38. low[u]=min(low[u],dfn[v]);
  39. }
  40. if(low[v]>dfn[u]){
  41. cut[i]=cut[i^]=;
  42. }
  43. }
  44. }int main(){
  45. while(scanf("%d%d",&n,&m)!=EOF){
  46. if(n+m<=) break;
  47. init();
  48. for(int i=;i<=m;i++){
  49. int u,v,w;
  50. scanf("%d%d%d",&u,&v,&w);
  51. adde(u,v,w);adde(v,u,w);
  52. }
  53. int cnt = ;
  54. for(int i=;i<=n;i++){
  55. if(!dfn[i]){
  56. Tarjan(i,i);
  57. cnt++;
  58. }
  59. }
  60. if(cnt>){
  61. cout<<<<endl;
  62. continue ;
  63. }
  64. int ans = 0x3f3f3f3f;
  65. for(int i=;i<tot;i+=){
  66. if(cut[i])ans=min(ans,e[i].w);
  67. }
  68. if(ans==0x3f3f3f3f) puts("-1");
  69. else cout<<max(ans,)<<endl;
  70. }
  71. return ;
  72. }

HDU4738:Caocao's Bridges(求桥)的更多相关文章

  1. HDU-4738 Caocao's Bridges,注意重边不是桥!

    Caocao's Bridges 题意:曹操赤壁之战后卷土重来,他在n个小岛之间建立了m座桥.现在周瑜只有一颗炮弹,他只能炸毁一座桥使得这些岛屿不再连通.每座桥上都可能会有士兵把手,如果想安放***那 ...

  2. hdu-4738.Caocao's Bridges(图中权值最小的桥)

    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: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. HDU4738 Caocao's Bridges 无向图的桥

    一眼题:找所有的桥,然后求最小权值 但是有很多坑点 1:如果本来不联通 输出0,(这个坑我知道) 2:但是还有一个坑,就是当整个连通,最小桥的权值是0时,也必须派一个人去,wa了无数遍(还是太年轻) ...

  5. hdu 4738 Caocao's Bridges 求无向图的桥【Tarjan】

    <题目链接> 题目大意: 曹操在长江上建立了一些点,点之间有一些边连着.如果这些点构成的无向图变成了连通图,那么曹操就无敌了.周瑜为了防止曹操变得无敌,就打算去摧毁连接曹操的点的桥.但是诸 ...

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

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

  7. HDU-4738 Caocao's Bridges 边联通分量

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4738 题意:在有重边的无向图中,求权值最小的桥. 注意trick就好了,ans为0时输出1,总要有一个 ...

  8. hdu4738 Caocao's Bridges

    http://acm.hdu.edu.cn/showproblem.php?pid=4738 题目大意:曹操赤壁之战大败,于是卷土重来.为了避免水上作战,他在长江上建立了一些岛屿,这样他的士兵就可以在 ...

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

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

随机推荐

  1. Struts2(八.添加用户多张照片实现文件上传功能)

    1.modify.jsp 在modify.jsp修改用户信息页面实现文件上传,添加用户照片的功能 如果是文件上传,method必须是post,必须指定enctype <form method=& ...

  2. hadoop3.0新特性及新功能

    Hadoop-3.0.0-alpha2版本发布,相比之前的hadoop-2.x有一系列的功能增强.但目前还是个alpha版本,有很多bug,且不能保证API的稳定和质量. 主要变化 Java最低版本要 ...

  3. 并发HashMap的put操作引起死循环

    今天研读Java并发容器和框架时,看到为什么要使用ConcurrentHashMap时,其中有一个原因是:线程不安全的HashMap, HashMap在并发执行put操作时会引起死循环,是因为多线程会 ...

  4. The Activation Function in Deep Learning 浅谈深度学习中的激活函数

    原文地址:http://www.cnblogs.com/rgvb178/p/6055213.html 版权声明:本文为博主原创文章,未经博主允许不得转载. 激活函数的作用 首先,激活函数不是真的要去激 ...

  5. 十一:Centralized Cache Management in HDFS 集中缓存管理

    集中的HDFS缓存管理,该机制可以让用户缓存特定的hdfs路径,这些块缓存在堆外内存中.namenode指导datanode完成这个工作. Centralized cache management i ...

  6. HDU 2489 Minimal Ratio Tree(暴力+最小生成树)(2008 Asia Regional Beijing)

    Description For a tree, which nodes and edges are all weighted, the ratio of it is calculated accord ...

  7. codeforces 269C Flawed Flow(网络流)

    Emuskald considers himself a master of flow algorithms. Now he has completed his most ingenious prog ...

  8. Calculator Part Ⅰ (代码规范化修改)

    GitHub/object-oriented 本次参照的C++代码规范 有一些规范内容在文件中其实并未提及,比如:空格的使用,修改的时候真的是一头雾水--根据文件中的例子,发现了一些文字部分没有提到的 ...

  9. python学习笔记07:自定义类型

    class person: def __init__(self,name,age,weight): self.name = name self.age = age self.weight = weig ...

  10. Scala快速入门-基本数据结构

    模式匹配 使用用模式匹配实现斐波那契 def fibonacci(in: Any): Int = in match { case 0 => 0 case 1 => 1 case n: In ...