题意:

曹操在赤壁之战中被诸葛亮和周瑜打败。但他不会放弃。曹操的军队还是不擅长打水仗,所以他想出了另一个主意。他在长江上建造了许多岛屿,在这些岛屿的基础上,曹操的军队可以轻易地攻击周瑜的军队。曹操还修建了连接岛屿的桥梁。如果所有的岛屿都用桥连接起来,曹操的军队就可以很方便地部署在这些岛屿之间。周瑜无法忍受,他想毁掉曹操的一些桥梁,把一个或多个岛屿与其他岛屿分开。周瑜身上只有一颗炸弹,是诸葛亮留下的,所以他只能毁掉一座桥。周瑜必须派人带着炸弹去炸毁那座桥。桥上可能有警卫。轰炸队的士兵人数不能少于一座桥的守卫人数,否则任务就会失败。请至少计算出周瑜要派多少士兵去完成离岛任务。

题解+代码:

  1. 1 //题解:
  2. 2 //这道题。。。。。。T_T
  3. 3 //这道题要先判断有没有桥,没有桥的话就直接输出-1
  4. 4 //如果有桥的话还要注意如果有一座桥上没有警卫,但是我们还是要派一人去炸桥
  5. 5 //所以要有两个特判,卧槽!
  6. 6 #include<stdio.h>
  7. 7 #include<string.h>
  8. 8 #include<iostream>
  9. 9 #include<algorithm>
  10. 10 #include<queue>
  11. 11 #include<map>
  12. 12 #include<vector>
  13. 13 using namespace std;
  14. 14 const int maxn = 1005;
  15. 15 const int INF=0x3f3f3f3f;
  16. 16 struct node {
  17. 17 int v, next,w;
  18. 18 }e[maxn*maxn*2+10];
  19. 19 int head[maxn], cnt;
  20. 20 bool iscut[maxn];
  21. 21 int dfn[maxn], low[maxn];
  22. 22 int num,n,m,minn;
  23. 23 inline void add_edge(int xx, int yy,int zz) {
  24. 24 e[++cnt].next = head[xx];
  25. 25 e[cnt].w=zz;
  26. 26 e[cnt].v = yy;
  27. 27 head[xx] = cnt;
  28. 28 }
  29. 29
  30. 30 inline void tarjan(int x, int in_edge) {
  31. 31 dfn[x] = low[x] = ++num;
  32. 32 for(int i = head[x]; i; i = e[i].next) {
  33. 33 int to = e[i].v;
  34. 34 if(!dfn[to]) {
  35. 35 tarjan(to, i);
  36. 36 low[x] = min(low[x], low[to]);
  37. 37 if(low[to] > dfn[x])
  38. 38 iscut[i] = iscut[i ^ 1] = true,minn=min(minn,e[i].w);
  39. 39 }
  40. 40 else if(i != (in_edge ^ 1))
  41. 41 low[x] = min(low[x], dfn[to]);
  42. 42 }
  43. 43 }
  44. 44 int main()
  45. 45 {
  46. 46 while(~scanf("%d%d",&n,&m) && (n+m))
  47. 47 {
  48. 48
  49. 49 cnt=1;
  50. 50 num=0;
  51. 51 memset(iscut,0,sizeof(iscut));
  52. 52 memset(head,0,sizeof(head));
  53. 53 memset(dfn,0,sizeof(dfn));
  54. 54 memset(low,0,sizeof(low));
  55. 55 while(m--)
  56. 56 {
  57. 57 int x,y,z;
  58. 58 scanf("%d%d%d",&x,&y,&z);
  59. 59 add_edge(x,y,z);
  60. 60 add_edge(y,x,z);
  61. 61 }
  62. 62 int flag=0;
  63. 63 minn=INF;
  64. 64 for(int i=1;i<=n;++i)
  65. 65 {
  66. 66 if(!dfn[i])
  67. 67 {
  68. 68 tarjan(i,0);
  69. 69 flag++;
  70. 70 }
  71. 71 }
  72. 72 if(flag>1)
  73. 73 {
  74. 74 printf("0\n");
  75. 75 }
  76. 76 else
  77. 77 {
  78. 78 if(minn==INF) printf("-1\n");
  79. 79 else if(minn==0) printf("1\n");
  80. 80 else printf("%d\n",minn);
  81. 81 }
  82. 82 }
  83. 83 return 0;
  84. 84 }

Caocao's Bridges HDU - 4738 找桥的更多相关文章

  1. Caocao's Bridges HDU - 4738 求桥

    题目描述 Caocao was defeated by Zhuge Liang and Zhou Yu in the battle of Chibi. But he wouldn't give up. ...

  2. 【HDU 4738 Caocao's Bridges】BCC 找桥

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4738 题意:给定一个n个节点m条边的无向图(可能不连通.有重边),每条边有一个权值.判断其连通性,若双 ...

  3. I - Caocao's Bridges - hdu 4738(求桥)

    题意:曹操的船之间有一些桥连接,现在周瑜想把这些连接的船分成两部分,不过他只能炸毁一座桥,并且每座桥上有士兵看守,问,他最少需要排多少士兵去炸桥如果不能做到,输出‘-1’ 注意:此题有好几个坑,第一个 ...

  4. (连通图 Tarjan)Caocao's Bridges --HDU --4738

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=4738 题目大意:曹操有很多岛屿,然后呢需要建造一些桥梁将所有的岛屿链接起来,周瑜要做的是就是不让曹操将所 ...

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

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

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

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

  7. 2013杭州网赛 1001 hdu 4738 Caocao's Bridges(双连通分量割边/桥)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4738 题意:有n座岛和m条桥,每条桥上有w个兵守着,现在要派不少于守桥的士兵数的人去炸桥,只能炸一条桥 ...

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

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

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

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

随机推荐

  1. 那些最全面的Windows10安装pytorch踩过的坑以及如何应用

    那些最全面的Windows10安装pytorch踩过的坑以及如何应用 一.pytorch简介 2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch.它是一个基 ...

  2. pidof

    pidof 服务名称,就可以查看到服务占用的进程号

  3. 【Oracle】sum(..) over(..)用法分析

    今天再看sql优化详解的时候,提到了一个sum(..) over(..) 于是自己实验并在网上找了相关的一些文章来看 下面创建一张表: create sequence xulie increment ...

  4. 【RAC】安装cluster软件 在节点2执行root.sh脚本

    安装cluster软件  在节点2执行root.sh脚本 报错如下: Running vipca(silent) for configuring nodeapps /db/oracle/product ...

  5. 攻防世界—pwn—guess_num

    题目分析 checksec检查文件保护机制 这个结果看的我满是问号??? \n ida分析程序 是一个猜数字的游戏,需要全部输入正确才能得到flag 根据大佬的wp得出一下内容 先使用srand()进 ...

  6. kubernetes之为每个命名空间的pod设置默认的requests以及limits

    一  为啥需要为命名空间里面添加pod添加默认的requests和limits? 通过前面的学习我们已经知道,如果节点上面的pod没有设置requests和limits,这些容器就会受那些设置了的控制 ...

  7. 十一、UART&TTY驱动

    Linux系统中UART驱动和TTY驱动两者有着紧密的关系,它们不像I2C和SPI驱动是单独一个模块,分析时应当将它们看成一个整体来分析.UART驱动部分依赖于硬件平台,而TTY驱动和具体的平台无关. ...

  8. linux opt, usr文件夹说明

    linux下各文件夹介绍: https://www.pathname.com/fhs/pub/fhs-2.3.html /usr:系统级的目录,可以理解为C:/Windows/,/usr/lib理解为 ...

  9. mysql忽略表中的某个字段不查询

    业务场景 1.表中字段较多 2.查询不需要表中某个字段的数据 语句如下: SELECT CONCAT(' select ',GROUP_CONCAT(COLUMN_NAME),' from ', TA ...

  10. JS复习笔记一:冒泡排序和二叉树列

    在这里逐步整理一些JS开发的知识,分享给大家: 一:冒泡排序 使用场景:数组中根据某个值得大小来对这个数组进行整体排序 难度:简单 原理:先进行循环,循环获取第一至倒数第二的范围内所有值,对当前值与下 ...