<题目链接>

题目大意:

  曹操在长江上建立了一些点,点之间有一些边连着。如果这些点构成的无向图变成了连通图,那么曹操就无敌了。周瑜为了防止曹操变得无敌,就打算去摧毁连接曹操的点的桥。但是诸葛亮把所有炸弹都带走了,只留下一枚给周瑜。所以周瑜只能炸一条桥。

  题目给出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】的更多相关文章

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

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

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

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

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

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

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

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

  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 (2013杭州网络赛1001题,连通图,求桥)

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

  7. hdu 4738 Caocao's Bridges 图--桥的判断模板

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

  8. HDU——4738 Caocao's Bridges

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

  9. HDU 4738 Caocao's Bridges

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

随机推荐

  1. 【IT界的厨子】酱香鲈鱼

    食材: 前世曾经回眸的鲈鱼一条(主要选刺少的鱼,适合孩子吃,大人吃随意,草鱼比较大) 五花肉少许(肥一些的) 豆腐 辅料: 葱姜 蒜(选) 大料 香菜 调味: 啤酒(两罐) 黄豆酱或豆瓣酱(选) 老抽 ...

  2. python之functools partial

    from functools import partial def aa(a,b,c): print ('a :',a) print ('b :',b) print ('c :',c) bb=part ...

  3. Struts防止表单重复提交

    1.什么是表单重复提交 > 在不刷新表单页面的前提下:         >> 多次点击提交按钮        >> 已经提交成功, 按 "回退" 之后 ...

  4. 【Linux】Linux中Swap与Memory内存简单介绍

    背景介绍 对于Linux来说,其在服务器市场的使用已经占据了绝对的霸主地位,不可动摇.Linux的各种设计思想和使用也被传承(当然不乏各种黑Linux,而且黑的漂亮).Linux的很多独特的设计,对性 ...

  5. ASP.NET MVC + EF 更新的几种方式(超赞)

    1.常用 db.Entry(实体).State = EntityState.Modified;db.SaveChanges(); 2.指定更新 db.Configuration.ValidateOnS ...

  6. MR数据生成工具指向目录

    mrDataTidy_SaveTwoDays.jar 原始路径 :D:\太原MR数据\一天数据整理 目标路径 : D:\MR现场数据整理\保存两天_整理后数据 例如 当前时间:2017-5-17 10 ...

  7. 如何在Linux下写无线网卡的驱动【转】

    转自:http://www.crifan.com/files/doc/docbook/linux_wireless/release/html/linux_wireless.html 版本:v0.3 H ...

  8. springboot系列四、配置模板引擎、配置热部署

    一.配置模板引擎 在之前所见到的信息显示发现都是以 Rest 风格进行显示,但是很明显在实际的开发之中,所有数据的显示最终都应该交由页面完成,但是这个页面并不是*.jsp 页面,而是普通的*.html ...

  9. 【转】snprintf()函数使用方法

    众所周知,sprintf不能检查目标字符串的长度,可能造成众多安全问题,所以都会推荐使用snprintf. 注:sprintf()函数:int sprintf( char *buffer, const ...

  10. route 的标志位

    linux下利用route命令查看当前路由信息时,会打印如下信息: root@root:/# route Kernel IP routing tableDestination     Gateway  ...