http://acm.hdu.edu.cn/showproblem.php?pid=4738

题目大意:曹操赤壁之战大败,于是卷土重来。为了避免水上作战,他在长江上建立了一些岛屿,这样他的士兵就可以在岛屿上攻击到

周瑜的军队。同时,为了更方便各个岛屿的支援与部署,他在一些岛屿之间又修建了一些桥,并且在桥上准备了一些守卫的士兵。周瑜

看到后当然要破坏这些岛屿的连接,然而诸葛亮只给他留下了一个bomb,他如果想要炸毁一座桥需要派出至少和守卫士兵数相等的敢死队

去。问最少需要派出多少人。

很佩服出题人有这么大的脑洞。

很直白的连通图找桥,然后取这些桥中权值(守卫士兵数)最小的即可。可是我太天真了。

WA了9次。呵呵呵呵呵

坑点:

1:可能一开始给出的图根本不是连通图(这也可以),这样岛屿没连接,不用人去, 输出人数是0;

2:输入中含有重复边,就是两个岛屿之间有两座桥。这样明显这两点间的边即使是桥也不算了,耿直的

用数组的直接将权值归为oo即可。或者用邻接表写的标记重边。

3:某桥上的守卫士兵数是0.(一开始把图的权值初始化成0了结果这条边被判成不存在了。。。WA了三次后才发现,初始化为-1才判进去。)

按题面的叙述是0,然而正确的是1。因为bomb至少需要一个人带过去...

附AC代码:

#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
#define oo 0x3f3f3f3f
int G[][], ans, fa[], dfn[], low[], Time, m, n, nblocks;
void Tarjin(int u, int father)
{
dfn[u] = low[u] = ++Time;
fa[u] = father;
for(int i=; i<=n; i++)
{
if(G[u][i]!=-)
{
if(!dfn[i])
{
Tarjin(i, u);
low[u] = min(low[u], low[i]);
if(low[i]>dfn[u])ans = min(ans, G[u][i]);
}
else if(i!=father)
low[u] = min(low[u], dfn[i]);
}
}
}
int main()
{
while(scanf("%d %d", &n, &m), m+n)
{
int a, b, c;
memset(low, , sizeof(low));
memset(dfn, , sizeof(dfn));
memset(G, -, sizeof(G));
for(int i=; i<=m; i++)
{
scanf("%d %d %d", &a, &b, &c);
if(G[a][b]==-)
G[a][b] = G[b][a] = c;
else G[a][b] = G[b][a] = oo;
}
nblocks = ;
Time = ;
ans = oo;
Tarjin(, -);
int flag = ;
for(int i=; i<=n; i++)
if(!dfn[i])
{
flag = ;
break;
}
if(!flag)
{
printf("0\n");
continue;
}
if(ans==oo)printf("-1\n");
else printf("%d\n", ans==?:ans);
}
return ;
}

hdu4738 Caocao's Bridges的更多相关文章

  1. hdu-4738.Caocao's Bridges(图中权值最小的桥)

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

  2. HDU4738:Caocao's Bridges(求桥)

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

  3. HDU-4738 Caocao's Bridges,注意重边不是桥!

    Caocao's Bridges 题意:曹操赤壁之战后卷土重来,他在n个小岛之间建立了m座桥.现在周瑜只有一颗炮弹,他只能炸毁一座桥使得这些岛屿不再连通.每座桥上都可能会有士兵把手,如果想安放***那 ...

  4. HDU4738 Caocao's Bridges —— 边双联通分量 + 重边

    题目链接:https://vjudge.net/problem/HDU-4738 A network administrator manages a large network. The networ ...

  5. HDU-4738 Caocao's Bridges 边联通分量

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4738 题意:在有重边的无向图中,求权值最小的桥. 注意trick就好了,ans为0时输出1,总要有一个 ...

  6. HDU4738 Caocao's Bridges 无向图的桥

    一眼题:找所有的桥,然后求最小权值 但是有很多坑点 1:如果本来不联通 输出0,(这个坑我知道) 2:但是还有一个坑,就是当整个连通,最小桥的权值是0时,也必须派一个人去,wa了无数遍(还是太年轻) ...

  7. HDU4738 Caocao's Bridges【强连通】

    题意: 曹操有N个岛,这些岛用M座桥连接起来,每座桥有士兵把守(也可能没有),周瑜想让这N个岛不连通,但只能炸掉一座桥,并且炸掉一座桥需要派出不小于守桥士兵数的人去,桥的守兵数为0时,也需要派出一个人 ...

  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(Tarjan求桥+重边判断)

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

随机推荐

  1. Sublime Text 3常用快捷键

    收集的一些常用快捷键: 选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子:快速选中并更 ...

  2. ASP.NET同页面内【用户控件与父页面】以及【用户控件与用户控件】之间方法调用

    在用户控件中,获取父页面的方法 1:方法没有参数(userInfor()) string userInfor = Convert.ToString(this.Page.GetType().GetMet ...

  3. 通过Java Api与HBase交互(转)

    HBase提供了Java Api的访问接口,掌握这个就跟Java应用使用RDBMS时需要JDBC一样重要,本文将继续前两篇文章中blog表的示例,介绍常用的Api. import java.io.IO ...

  4. 58. N-Queens && N-Queens II

    N-Queens The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no tw ...

  5. Excel—“撤销工作表保护密码”的破解并获取原始密码

    您是否遇到过这样的情况:您用Excel编制的报表.表格.程序等,在单元格中设置了公式.函数等,为了防止其他人修改您的设置或者防止您自己无意中修改,您可能会使用Excel的工作表保护功能,但时间久了保护 ...

  6. 实现Base64加密解密

    using System; using System.Text;   namespace Common { /// <summary> /// 实现Base64加密解密 /// </ ...

  7. NSString和NSMutableString的创建及其一些常用方法

    NSString和NSMutableString都是对象类型,是NSObject的子类.NSString是不可变字符串,NSMutableString是可变字符串 一.NSString的创建 1.创建 ...

  8. NHibernate系列文章十:NHibernate对象二级缓存下

    摘要 上一节对NHibernate二级缓存做了简单介绍,NHibernate二级缓存是由SessionFactory管理的,所有Session共享.这一节介绍二级缓存其他两个方面:二级缓存查询和二级缓 ...

  9. SQL笔记-第七章,表连接

    SQL中使用JOIN 关键字来使用表连接.表连接有多种不同的类型,被主流数据库系统支持的有交叉连接(CROSS JOIN).内连接(INNER JOIN).外连接(OUTTER JOIN),另外在有的 ...

  10. redis 问题解决(MISCONF Redis is configured to save RDB snapshots)

    (error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on d ...