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

<题目链接>

题目大意:

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

  题目给出n,m。表示有n个点,m条桥。

  接下来的m行每行给出a,b,c,表示a点和b点之间有一条桥,而且曹操派了c个人去守卫这条桥。

  现在问周瑜最少派多少人去炸桥。

  如果无法使曹操的点成为多个连通图,则输出-1.

解题思路:

  就是用Tarjan找出图中所有的桥,并且不断更新所有桥上防守人数最少的值。

需要注意几点:

  1.首先先判断整张图是否为连通图,如果不为连通图,则无需派人去炸桥;

  2.如果原图不存在桥,即,只炸毁一条边不能够破坏原图的连通性,就直接输出-1;

  3.如果防守人数最少的那个桥上的防守人数为0,也需要派人去炸桥,因为那座桥不会自动毁坏。

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<cstdlib>
 6 using namespace std;
 7 const int maxn = 1007;
 8 const int INF = 0x3f3f3f3f;
 9 struct node{
10     int to,cost,next;
11 };
12 node edge[maxn*maxn];
13 int head[maxn],n,m,num,ans,sum,dfn[maxn],child,low[maxn];
14 void addedge(int u,int v,int c){    //双向存图
15     edge[num].to=v;edge[num].cost=c;edge[num].next=head[u];
16     head[u]=num++;
17     edge[num].to=u;edge[num].cost=c;edge[num].next=head[v];
18     head[v]=num++;
19 }
20 void tarjan(int u,int fa){
21     child++;     //child记录连通到的点的数量
22     low[u]=dfn[u]=sum++;
23     for(int i=head[u];i!=-1;i=edge[i].next){
24         int v=edge[i].to;
25         if(i==(fa^1)) continue;    //标记反向边 
26         if(!dfn[v]){
27             tarjan(v,i);
28             low[u]=min(low[u],low[v]);
29             if(dfn[u]<low[v]){    //桥的判定方法  因为low[v]<dfn[u],说明v和u不属于同一联通块,并且v不能通过u-v之间的边到达比low[v]小的点,说明这条边为桥
30                 ans=min(ans,edge[i].cost);    //更新权值最小的桥
31             }
32         }
33         else low[u]=min(low[u],dfn[v]);
34     }
35 }
36 
37 int main(){
38     int a,b,c;
39     while(~scanf("%d%d",&n,&m),n||m){
40         memset(head,-1,sizeof(head));
41         memset(dfn,0,sizeof(dfn));
42         memset(low,0,sizeof(low));
43         ans=INF;child=0;sum=1;
44         for(int i=1;i<=m;i++){
45             scanf("%d%d%d",&a,&b,&c);
46             addedge(a,b,c);      
47         }
48         tarjan(1,-1);
49         if(child<n) printf("0\n");    //如果原图本来就不是连通图,就直接输出0即可
50         else if(ans==INF)printf("-1\n"); //如果没有桥,即,只派出一个人不能将原图的连通性破坏,就直接输出-1
51         else if(ans==0) printf("1\n");   //如果桥上无人防守,也需要派人去把那座桥炸毁   
52         else printf("%d\n",ans);
53     }
54     return 0;
55 }

 

 

2018-08-17

转载于:https://www.cnblogs.com/00isok/p/9490907.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/413518.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[css] 如何使用css给一个正方形添加一条对角斜线?

[css] 如何使用css给一个正方形添加一条对角斜线&#xff1f; background:linear-gradient(45deg,transparent 49.5%,deeppink 49.5%,deeppink 50.5%,transparent 50.5%);个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。…

SQL Server2014 SP2新增的数据库克隆功能

SQL Server2014 SP2新增的数据库克隆功能 原文:SQL Server2014 SP2新增的数据库克隆功能SQL Server2014 SP2新增的数据库克隆功能 创建测试库 --创建测试数据库 create database testtestuse testtest go --创建表 create table testtest(id int ,name varchar(20)) --插入数据…

[css] 举例说明CSS特性检测的方式有哪些?

[css] 举例说明CSS特性检测的方式有哪些&#xff1f; 原生的 supports 的性能肯定是最好的&#xff0c;而且无需引入外部 javascript &#xff0c;首推这个&#xff0c;但是无奈兼容问题&#xff0c;目前来看不是最好的选择。Modernizr 功能强大&#xff0c;兼容性好&#xff…

DIV布局、浮动

2018-08-17 float属性转载于:https://www.cnblogs.com/twinkle-star/p/9493415.html

工作328:uni-局部过滤器处理数据

toChangeLess(e){console.log(e)/* 过滤数据中的循环请求*/if(e0){return "不循环"}else if(e12345){return "周一到周五循环"}else if(e12345678){return "每日循环"}}运行结果

css ——行级元素与块级元素解析

一 . 先说说二者的本质区别吧&#xff1a; 行级元素是可以和其他元素处于一行&#xff0c;不用必须另起一行。块级元素是每个块级元素都是独自占一行&#xff0c;其后的元素也只能另起一行&#xff0c;并不能两个元素共用一行。 二 .下面看看各自的特点&#xff1a; 块级元素 1…

工作329:uni-数据为空不显示

<u-image v-if"tableData[item]!null" style"display: block;float: left;margin-left: 26rpx;margin-top: 26rpx;" width"120rpx" height"120rpx" :src"tableData[item]"></u-image>

vue.js框架:数组的各种变异方法

今天阅读vue官网的学习教程&#xff0c;看到一个观察数组的变异方法。变异方法&#xff1f;&#xff1f;&#xff1f;excuse me??什么东西&#xff1f;&#xff1f;guide就给了这么一堆东西&#xff1a; 原来这些方法如下&#xff1a; push() pop() shift() uns…

CodeForces - 894E Ralph and Mushrooms (强连通缩点+dp)

题意&#xff1a;一张有向图&#xff0c;每条边上都有wi个蘑菇&#xff0c;第i次经过这条边能够采到w-(i-1)*i/2个蘑菇&#xff0c;直到它为0。问最多能在这张图上采多少个蘑菇。 分析&#xff1a;在一个强连通分量内&#xff0c;边可以无限次地走直到该连通块内蘑菇被采完为止…

工作328:uni-两个页面对象传递

getDetailList(record){console.log(record)uni.navigateTo({url:../formdaliyList/formdaliyList?recordencodeURIComponent(JSON.stringify(record))})},onLoad(e){/* JSON.parse() */let obj JSON.parse(decodeURIComponent(e.record));console.log(obj)},

vue-js 特殊变量$event常识

背景 如果我们要阻止默认事件&#xff0c;在 chrome 等浏览器中&#xff0c;我们可能要写一个&#xff1a; event.preventDefault(); 而在 IE 中&#xff0c;我们则需要写&#xff1a; event.returnValue false; jquery &#xff0c;跨浏览器的实现&#xff0c;我们统一只…

七、线性表的链式存储结构

1、问题引入 开发数组类模板的原因在于&#xff1a;在创建基于顺序存储结构的线性表时&#xff0c;发现这样的线性表可能被误用&#xff0c;因为重载了数组访问操作符&#xff0c;使用时跟数组类似&#xff0c;但是线性表和数组有很大的区别&#xff0c;所以激发了新的需求&…

工作331:uni-修改未完成数据动态渲染

<view v-for"(item,index) in TaskUnComplete" class"u-m-b-12" style"margin-left:30rpx;margin-top: 76rpx;">未完成-{{index1}}条</view><view v-for"(item,index) in TaskUnComplete"><view style"padd…

使用vue-CLI构建vue工程项目

vue2是对新手很友好的MVVM框架&#xff0c;有完善的官方中文文档&#xff0c;阅读起来也非常容易理解&#xff0c;由浅入深&#xff0c;示例完整。同时官方也提供了一个开箱即用的 vue-cli 帮我们生成一个完整的项目框架。 vue.js 著名的全家桶系列, 包含了&#xff0c; vue-ro…

Confluence 6 在 Apache 或者系统级别阻止垃圾

如果一个垃圾发布机器人攻击你的 Confluence 站点&#xff0c;这些程序可能来自于同一个 IP 地址&#xff0c;或者是一个比较小范围的 IP 地址段。希望找到攻击者的 IP 地址&#xff0c;请参考 Apache access logs 中的实时内容同时找到这些攻击者攻击的页面。 例如&#xff0c…

工作332:uni-uview上传获取到对应数据

let lists [];// 通过filter&#xff0c;筛选出上传进度为100的文件(因为某些上传失败的文件&#xff0c;进度值不为100&#xff0c;这个是可选的操作)lists this.$refs.uUpload.lists// 如果您不需要进行太多的处理&#xff0c;直接如下即可console.log(lists)

layui select框代码实现自动下拉

因为项目有个字段需要根据输入匹配类似选项通过下拉框表现出来&#xff0c;然后点击选择... 项目使用的layui框架&#xff0c;这个框架有个缺点就是一些H5标签使不上用场&#xff0c;比如datalist...&#xff0c;所以只能尝试寻找它自带的下拉事件怎么用了 //代码自动点击 se…

Chino的数列

题解&#xff1a; 一道练代码能力的题目。。 首先很显然他是一道平衡树裸题 第5个操作是势能分析维护最大值最小值就可以了 另外设置虚点和noip2017队列那题一样&#xff08;不过我只写过线段树&#xff09; 具体细节&#xff1a; 1.内存池&#xff0c;要直接判断(!x) 因为可能…

css 英文换行且单词始终保持在一起

方法一&#xff1a; 想让单词不换行用 word-break:keep-all; white-space:nowrap; 方法二&#xff1a; dispaly:block;text-overflow:ellipsis;overflow:hidden;white-space:nowrap; a换行且a内文本不换行 display:block;或者display:inline-block; width:xxpx;

工作333:uni-增加添加成功提示

this.$u.api.getPartyAdd(this.form).then(res > {console.log(res)if(res.data.code200){/* uni.showLoading({title: 添加中}); */this.$refs.uToast.show({title: res.data.message,type: success,})setTimeout(function () {uni.navigateTo({url: "../notice_notic…