2013杭州网赛 1001 hdu 4738 Caocao's Bridges(双连通分量割边/桥)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4738
题意:有n座岛和m条桥,每条桥上有w个兵守着,现在要派不少于守桥的士兵数的人去炸桥,只能炸一条桥,使得这n座岛不连通,求最少要派多少人去。
分析:只需要用Tarjan算法求出图中权值最小的那条桥就行了。但是这题有神坑。
第一坑:如果图不连通,不用派人去炸桥,直接输出0
第二坑:可能会有重边
第三坑:如果桥上没有士兵守着,那至少要派一个人去炸桥。
比赛的时候看完就想做了,但是图论太挫了,居然不会求桥,结果梓铭大神一下子就把代码敲好了,但是苦于题目有神坑,交了几次wa后,突然醒悟,才把题目AC了。
AC代码:
![](/assets/blank.gif)
![](/assets/blank.gif)
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(双连通分量割边/桥)相关推荐
- hdu 4738 Caocao's Bridges 求无向图的桥【Tarjan】
<题目链接> 题目大意: 曹操在长江上建立了一些点,点之间有一些边连着.如果这些点构成的无向图变成了连通图,那么曹操就无敌了.周瑜为了防止曹操变得无敌,就打算去摧毁连接曹操的点的桥.但是诸 ...
- HDU 4738 Caocao‘s Bridges(桥、任何位运算一定都要加括号、因为有重边所以用前向星)
HDU 4738 Caocao's Bridges(桥.任何位运算一定都要加括号.因为有重边所以用前向星) Caocao was defeated by Zhuge Liang and Zhou Yu ...
- Hdu 4738 Caocao's Bridges (连通图+桥)
题目链接: Hdu 4738 Caocao's Bridges 题目描述: 有n个岛屿,m个桥,问是否可以去掉一个花费最小的桥,使得岛屿边的不连通? 解题思路: 去掉一个边使得岛屿不连通,那么去掉的这 ...
- 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 ...
- HDU - 4738 Caocao's Bridges(边双缩点)
题目链接:点击查看 题目大意:给出一个由n个点和m条边构成的无向图,表示n个岛屿之间的m条道路,现在周瑜有一个炸药,可以炸掉任意的一条道路,不过每条道路都有一个权值,代表这条道路上防守的卫兵数量,如果 ...
- 【2018-CCPC青岛网赛】 HDU - 6441 Find Integer
[2018-CCPC青岛网赛] HDU - 6441 Find Integer 源链接: HDU - 6441 文源 :Blog 题意 已知等式,a^n + b ^ n = c ^ n,题目中给出 a ...
- HDU 3394 Railway(点双连通分量)
题目大意 一个公园中有 n 个景点,景点之间通过无向的道路来连接,如果至少两个环公用一条路,路上的游客就会发生冲突:如果一条路不属于任何的环,这条路就没必要修 问,有多少路不必修,有多少路会发生冲突 ...
- 沈阳网赛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).需要乘以圆排列的 ...
- 华为杯数学建模优秀论文_数学建模经典例题(2013年国赛A题与优秀论文)
数学建模经典例题 (更多往期经典例题可点击文章最后相关推荐哦) 相关推荐 数学建模经典例题(2000年国赛B题与解题思路) 数学建模经典例题(2001年国赛A题与优秀论文) 数学建模经典例题(2001 ...
- 牛客网赛码网 输入输出格式
目录 牛客网&赛码网输入输出 牛客网 单行输入 多行输入,每一行是一个测试样例 多个测试用例,每个测试用例有多行 赛码网 单个输入,单个输出 单行多个输入,单行多个输出,空格分割 多个测试案例 ...
最新文章
- python编程初学者指南pdf-Python物理建模初学者指南
- [转贴]无刷新的2个DropDownList联动
- linux 单独取出本机IP地址
- CentOS7,linux下nginx的安装过程——2.配置user,路径,openssl,make install,关闭防火墙,测试——源码
- c语言跑马灯实验报告,单片机跑马灯实验
- “云网管” ---云上构建网络自动化体系
- 解决MSChart底部横坐标显示不全的问题
- Python Web框架Django学习(二)
- paraview如何查看速度三维坐标_AutoCAD三维建模与AutoLISP地形展点检查隧道工程开挖效果...
- 数据库中复合主键与联合主键
- 在电脑上安装Intel HAXM(硬件加速执行管理器)
- android第三方库进程,Android 第三方库AgentWeb的使用
- 使用ffmpeg从视频中提取纯音频纯视频
- Crumb -面包屑状的嵌套按钮
- 【CXY】JAVA基础 之 异常概述
- 对抗拖延症最直接有效的方法
- 基于JAVA口红专卖网站计算机毕业设计源码+数据库+lw文档+系统+部署
- 2022年38女神节大促美妆、珠宝、母婴、保健电商数据回顾
- 基于CNTK实现自定义类库及使用方式(MNIST为例)【附源码】
- bak文件转换成sql文件_数据库bak文件转sql