hdu 4738 Caocao's Bridges 求无向图的桥【Tarjan】
<题目链接>
题目大意:
曹操在长江上建立了一些点,点之间有一些边连着。如果这些点构成的无向图变成了连通图,那么曹操就无敌了。周瑜为了防止曹操变得无敌,就打算去摧毁连接曹操的点的桥。但是诸葛亮把所有炸弹都带走了,只留下一枚给周瑜。所以周瑜只能炸一条桥。
题目给出n,m。表示有n个点,m条桥。
接下来的m行每行给出a,b,c,表示a点和b点之间有一条桥,而且曹操派了c个人去守卫这条桥。
现在问周瑜最少派多少人去炸桥。
如果无法使曹操的点成为多个连通图,则输出-1.
解题思路:
就是用Tarjan找出图中所有的桥,并且不断更新所有桥上防守人数最少的值。
需要注意几点:
1.首先先判断整张图是否为连通图,如果不为连通图,则无需派人去炸桥;
2.如果原图不存在桥,即,只炸毁一条边不能够破坏原图的连通性,就直接输出-1;
3.如果防守人数最少的那个桥上的防守人数为0,也需要派人去炸桥,因为那座桥不会自动毁坏。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
const int maxn = ;
const int INF = 0x3f3f3f3f;
struct node{
int to,cost,next;
};
node edge[maxn*maxn];
int head[maxn],n,m,num,ans,sum,dfn[maxn],child,low[maxn];
void addedge(int u,int v,int c){ //双向存图
edge[num].to=v;edge[num].cost=c;edge[num].next=head[u];
head[u]=num++;
edge[num].to=u;edge[num].cost=c;edge[num].next=head[v];
head[v]=num++;
}
void tarjan(int u,int fa){
child++; //child记录连通到的点的数量
low[u]=dfn[u]=sum++;
for(int i=head[u];i!=-;i=edge[i].next){
int v=edge[i].to;
if(i==(fa^)) continue; //标记反向边
if(!dfn[v]){
tarjan(v,i);
low[u]=min(low[u],low[v]);
if(dfn[u]<low[v]){ //桥的判定方法 因为low[v]<dfn[u],说明v和u不属于同一联通块,并且v不能通过u-v之间的边到达比low[v]小的点,说明这条边为桥
ans=min(ans,edge[i].cost); //更新权值最小的桥
}
}
else low[u]=min(low[u],dfn[v]);
}
} int main(){
int a,b,c;
while(~scanf("%d%d",&n,&m),n||m){
memset(head,-,sizeof(head));
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
ans=INF;child=;sum=;
for(int i=;i<=m;i++){
scanf("%d%d%d",&a,&b,&c);
addedge(a,b,c);
}
tarjan(,-);
if(child<n) printf("0\n"); //如果原图本来就不是连通图,就直接输出0即可
else if(ans==INF)printf("-1\n"); //如果没有桥,即,只派出一个人不能将原图的连通性破坏,就直接输出-1
else if(ans==) printf("1\n"); //如果桥上无人防守,也需要派人去把那座桥炸毁
else printf("%d\n",ans);
}
return ;
}
2018-08-17
hdu 4738 Caocao's Bridges 求无向图的桥【Tarjan】的更多相关文章
- 【HDU 4738 Caocao's Bridges】BCC 找桥
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4738 题意:给定一个n个节点m条边的无向图(可能不连通.有重边),每条边有一个权值.判断其连通性,若双 ...
- 2013杭州网赛 1001 hdu 4738 Caocao's Bridges(双连通分量割边/桥)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4738 题意:有n座岛和m条桥,每条桥上有w个兵守着,现在要派不少于守桥的士兵数的人去炸桥,只能炸一条桥 ...
- Hdu 4738 Caocao's Bridges (连通图+桥)
题目链接: Hdu 4738 Caocao's Bridges 题目描述: 有n个岛屿,m个桥,问是否可以去掉一个花费最小的桥,使得岛屿边的不连通? 解题思路: 去掉一个边使得岛屿不连通,那么去掉的这 ...
- HDU 4738——Caocao's Bridges——————【求割边/桥的最小权值】
Caocao's Bridges Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 4738 Caocao's Bridges(Tarjan求桥+重边判断)
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 4738 Caocao's Bridges (2013杭州网络赛1001题,连通图,求桥)
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- hdu 4738 Caocao's Bridges 图--桥的判断模板
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU——4738 Caocao's Bridges
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 4738 Caocao's Bridges
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
随机推荐
- CF949D Curfew
传送门 跟这个大佬学的->戳我 假设只有一个宿管,那么从前往后做的过程中,如果能到达某个寝室范围内的人数不够\(b\),那么不如把这个寝室空出来,这样更有利于后面的抉择;反之,就把这个寝室搞正好 ...
- FPN-Feature Pyramid Networks for Object Detection
FPN-Feature Pyramid Networks for Object Detection 标签(空格分隔): 深度学习 目标检测 这次学习的论文是FPN,是关于解决多尺度问题的一篇论文.记录 ...
- redis实现消息队列&发布/订阅模式使用
在项目中用到了redis作为缓存,再学习了ActiveMq之后想着用redis实现简单的消息队列,下面做记录. Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易的实现一个高性 ...
- Maven入门---修改tomcat版本及端口及访问路径(四)
Maven中通过添加插件修改tomcat版本及端口及访问路径 --------------------------------------------------------------------- ...
- sql 查询名字中有_的员工
select * from emp where ename like '%\_%' escape '\' ;\可以换作任意的字符 select * from emp where ename like ...
- Linux文件目录类指令
⒈pwd 显示当前工作目录的绝对路径 ⒉ls [Options] [目录或文件] 常用选项: -a:显示当前目录下所有的文件和目录,包括隐藏的. -l:以列表的方式显示信息. ⒊cd [目录的绝对路径 ...
- javascript随笔和常见的知识点
1.js中循环中用 return只能停止循环,不能停止到函数的定义部分.所以下面的返回值为1 return 100没有意义,只起到终止循环的目的 function bb() { var sum = 0 ...
- ES系列七、ES-倒排索引详解
1.单词——文档矩阵 单词-文档矩阵是表达两者之间所具有的一种包含关系的概念模型,图3-1展示了其含义.图3-1的每列代表一个文档,每行代表一个单词,打对勾的位置代表包含关系. 图3-1 单词-文档矩 ...
- 一步步实现windows版ijkplayer系列文章之七——终结篇(附源码)
一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...
- Android命令Monkey压力测试,详解
一.Monkey 是什么?Monkey 就是SDK中附带的一个工具. 二.Monkey 测试的目的?:该工具用于进行压力测试. 然后开发人员结合monkey 打印的日志 和系统打印的日志,结局测试中出 ...