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

题意:有n座岛和m条桥,每条桥上有w个兵守着,现在要派不少于守桥的士兵数的人去炸桥,只能炸一条桥,使得这n座岛不连通,求最少要派多少人去。

分析:只需要用Tarjan算法求出图中权值最小的那条桥就行了。但是这题有神坑。

第一坑:如果图不连通,不用派人去炸桥,直接输出0

第二坑:可能会有重边

第三坑:如果桥上没有士兵守着,那至少要派一个人去炸桥。

比赛的时候看完就想做了,但是图论太挫了,居然不会求桥,结果梓铭大神一下子就把代码敲好了,但是苦于题目有神坑,交了几次wa后,突然醒悟,才把题目AC了。

AC代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 const int N=1000+5;
 4 struct EDGE{
 5     int v,w,next;
 6 }edge[N*N*2];
 7 int first[N],low[N],dfn[N],vis[N];
 8 int g,cnt,sum,ans;
 9 int min(int a,int b)
10 {
11     return a<b?a:b;
12 }
13 void AddEdge(int u,int v,int w)
14 {
15     edge[g].v=v;
16     edge[g].w=w;
17     edge[g].next=first[u];
18     first[u]=g++;
19 }
20 void Tarjan(int u,int fa)
21 {
22     int i,v;
23     low[u]=dfn[u]=++cnt;
24     for(i=first[u];i!=-1;i=edge[i].next)
25     {
26         v=edge[i].v;
27     //    if(v==fa)
28     //        continue;
29         if(i==(fa^1))
30             continue;
31         if(!dfn[v])
32         {
33             Tarjan(v,i);
34             low[u]=min(low[u],low[v]);
35             if(low[v]>dfn[u])
36             {
37                 if(edge[i].w<ans)
38                     ans=edge[i].w;
39             }
40         }
41         else
42             low[u]=min(low[u],dfn[v]);
43     }
44 }
45 void dfs(int u)
46 {
47     if(vis[u])
48         return ;
49     vis[u]=1;
50     sum++;
51     for(int i=first[u];i!=-1;i=edge[i].next)
52         dfs(edge[i].v);
53 }
54 int main()
55 {
56     int i,n,m,u,v,w;
57     while(scanf("%d%d",&n,&m))
58     {
59         if(n==0&&m==0)
60             break;
61         g=cnt=0;
62         memset(first,-1,sizeof(first));
63         memset(dfn,0,sizeof(dfn));
64         memset(vis,0,sizeof(vis));
65         while(m--)
66         {
67             scanf("%d%d%d",&u,&v,&w);
68             AddEdge(u,v,w);
69             AddEdge(v,u,w);
70         }
71         sum=0;
72         dfs(1);
73         if(sum<n)
74         {
75             printf("0\n");
76             continue;
77         }
78         ans=1000000;
79     //    for(i=1;i<=n;i++)
80     //        if(!dfn[i])
81     //            Tarjan(i,0);
82         Tarjan(1,-1);
83         if(ans==1000000)
84             printf("-1\n");
85         else
86         {
87             if(ans==0)
88                 ans=1;
89             printf("%d\n",ans);
90         }
91     }
92     return 0;
93 }

View Code

转载于:https://www.cnblogs.com/frog112111/p/3329220.html

2013杭州网赛 1001 hdu 4738 Caocao's Bridges(双连通分量割边/桥)相关推荐

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

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

  2. HDU 4738 Caocao‘s Bridges(桥、任何位运算一定都要加括号、因为有重边所以用前向星)

    HDU 4738 Caocao's Bridges(桥.任何位运算一定都要加括号.因为有重边所以用前向星) Caocao was defeated by Zhuge Liang and Zhou Yu ...

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

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

  4. HDU 4738 Caocao's Bridges 求桥 诸葛亮带着炸弹跑路了

    Description Caocao was defeated by Zhuge Liang and Zhou Yu in the battle of Chibi. But he wouldn't g ...

  5. HDU - 4738 Caocao's Bridges(边双缩点)

    题目链接:点击查看 题目大意:给出一个由n个点和m条边构成的无向图,表示n个岛屿之间的m条道路,现在周瑜有一个炸药,可以炸掉任意的一条道路,不过每条道路都有一个权值,代表这条道路上防守的卫兵数量,如果 ...

  6. 【2018-CCPC青岛网赛】 HDU - 6441 Find Integer

    [2018-CCPC青岛网赛] HDU - 6441 Find Integer 源链接: HDU - 6441 文源 :Blog 题意 已知等式,a^n + b ^ n = c ^ n,题目中给出 a ...

  7. HDU 3394 Railway(点双连通分量)

    题目大意 一个公园中有 n 个景点,景点之间通过无向的道路来连接,如果至少两个环公用一条路,路上的游客就会发生冲突:如果一条路不属于任何的环,这条路就没必要修 问,有多少路不必修,有多少路会发生冲突 ...

  8. 沈阳网赛1003 HDU 5894 hannnnah_j’s Biological Test

    考虑每两个人之间隔了几把椅子.可以发现,一共有m个数,和为n-m,且每个数都>=k.将每个数都减去k-1,即得到:m个正数之和为n-k*m,方案数为C(n-k*m-1,m-1).需要乘以圆排列的 ...

  9. 华为杯数学建模优秀论文_数学建模经典例题(2013年国赛A题与优秀论文)

    数学建模经典例题 (更多往期经典例题可点击文章最后相关推荐哦) 相关推荐 数学建模经典例题(2000年国赛B题与解题思路) 数学建模经典例题(2001年国赛A题与优秀论文) 数学建模经典例题(2001 ...

  10. 牛客网赛码网 输入输出格式

    目录 牛客网&赛码网输入输出 牛客网 单行输入 多行输入,每一行是一个测试样例 多个测试用例,每个测试用例有多行 赛码网 单个输入,单个输出 单行多个输入,单行多个输出,空格分割 多个测试案例 ...

最新文章

  1. python编程初学者指南pdf-Python物理建模初学者指南
  2. [转贴]无刷新的2个DropDownList联动
  3. linux 单独取出本机IP地址
  4. CentOS7,linux下nginx的安装过程——2.配置user,路径,openssl,make install,关闭防火墙,测试——源码
  5. c语言跑马灯实验报告,单片机跑马灯实验
  6. “云网管” ---云上构建网络自动化体系
  7. 解决MSChart底部横坐标显示不全的问题
  8. Python Web框架Django学习(二)
  9. paraview如何查看速度三维坐标_AutoCAD三维建模与AutoLISP地形展点检查隧道工程开挖效果...
  10. 数据库中复合主键与联合主键
  11. 在电脑上安装Intel HAXM(硬件加速执行管理器)
  12. android第三方库进程,Android 第三方库AgentWeb的使用
  13. 使用ffmpeg从视频中提取纯音频纯视频
  14. Crumb -面包屑状的嵌套按钮
  15. 【CXY】JAVA基础 之 异常概述
  16. 对抗拖延症最直接有效的方法
  17. 基于JAVA口红专卖网站计算机毕业设计源码+数据库+lw文档+系统+部署
  18. 2022年38女神节大促美妆、珠宝、母婴、保健电商数据回顾
  19. 基于CNTK实现自定义类库及使用方式(MNIST为例)【附源码】
  20. bak文件转换成sql文件_数据库bak文件转sql

热门文章

  1. 如何检查Mac的电池健康状况
  2. 如何使用Syncios Data Recovery直接从 iOS 设备恢复数据?
  3. Vue组件学习(转载)
  4. 配置GoldenGate意外处理及记录Oracle错误信息(1)
  5. dropdownlist返回值设置方法
  6. 屏蔽五项网络功能 让XP系统极速狂飙
  7. ORACLE的Copy命令和create table,insert into的比较
  8. Intellij IDEA 配置 Code Style
  9. 2021年2月移动互联网全行业排行榜
  10. 支付宝架构到底有多牛逼?看完这篇你就明白了!