求权值最小的桥,考虑几种特殊情况:

  • 图本身不连通,那么就不用派人去了
  • 图的边双连通分量只有一个,答案是-1
  • 桥的最小权值是0,但是也要派一个人过去
 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <stack>
using namespace std; const int maxn = + ;
const int maxm = + ; int n, m; int cc;
int pa[maxn];
int findset(int x) { return x == pa[x] ? x : pa[x] = findset(pa[x]); } void Union(int x, int y)
{
int px = findset(x), py = findset(y);
if(px != py) { pa[px] = py; cc--; }
} struct Edge
{
int v, nxt, w;
}edges[maxm * ];
int ecnt;
int head[maxn]; void AddEdge(int u, int v, int d)
{
edges[ecnt].v = v;
edges[ecnt].w = d;
edges[ecnt].nxt = head[u];
head[u] = ecnt++;
} stack<int> S;
bool isbridge[maxm * ];
int dfs_clock, scc_cnt;
int low[maxn], pre[maxn], sccno[maxn]; void dfs(int u, int fa)
{
pre[u] = low[u] = ++dfs_clock;
S.push(u); for(int i = head[u]; ~i; i = edges[i].nxt)
{
if(i == (fa ^ )) continue;
int v = edges[i].v;
if(!pre[v])
{
dfs(v, i);
low[u] = min(low[u], low[v]);
if(low[v] > low[u]) isbridge[i] = true;
}
else if(!sccno[v]) low[u] = min(low[u], pre[v]);
} if(low[u] == pre[u])
{
scc_cnt++;
for(;;)
{
int x = S.top(); S.pop();
sccno[x] = scc_cnt;
if(x == u) break;
}
}
} void find_scc()
{
dfs_clock = scc_cnt = ;
memset(isbridge, false, sizeof(isbridge));
memset(pre, , sizeof(pre));
memset(sccno, , sizeof(sccno));
for(int i = ; i <= n; i++) if(!pre[i]) dfs(i, -);
} int main()
{
while(scanf("%d%d", &n, &m) == && n)
{
ecnt = ;
memset(head, -, sizeof(head));
cc = n;
for(int i = ; i <= n; i++) pa[i] = i;
while(m--)
{
int u, v, d; scanf("%d%d%d", &u, &v, &d);
Union(u, v);
AddEdge(u, v, d); AddEdge(v, u, d);
} if(cc > ) { puts(""); continue; } find_scc(); if(scc_cnt == ) { puts("-1"); continue; } int ans = ;
for(int i = ; i < ecnt; i += ) if(isbridge[i]) ans = min(ans, edges[i].w);
if(!ans) ans = ;
printf("%d\n", ans);
} return ;
}

代码君

HDU 4738 双连通分量 Caocao's Bridges的更多相关文章

  1. HDU 3394 双连通分量 桥 Railway

    第一个答案是统计图中桥的个数 如果一个点-双连通分量中边的个数大于点的个数那么这个块中所有的边都是冲突的,累加到第二个答案中去. #include <iostream> #include ...

  2. HDU 2242 双连通分量 考研路茫茫——空调教室

    思路就是求边双连通分量,然后缩点,再用树形DP搞一下. 代码和求强连通很类似,有点神奇,=_=,慢慢消化吧 #include <cstdio> #include <cstring&g ...

  3. hdu 4738 (双联通求桥)

    2013 ACM/ICPC Asia Regional Hangzhou Online 题目大意:有n个岛,曹操在一些岛之间建了一些桥,每个桥上有一些士兵把守,周瑜只有一个炸弹只能炸掉一个桥,炸弹需要 ...

  4. HDU 4738 双连通模版题

    九野的博客,转载请注明出处:http://blog.csdn.net/acmmmm/article/details/11711577 题意:给定n个点,m条无向边 下面m行表示u , v ,边权值 求 ...

  5. hdoj 4738 Caocao's Bridges【双连通分量求桥】

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

  6. HDU 4738 Caocao's Bridges(Tarjan求桥+重边判断)

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

  7. hdu 4738 Caocao's Bridges (tarjan求桥)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4738 题目大意:给一些点,用一些边把这些点相连,每一条边上有一个权值.现在要你破坏任意一个边(要付出相 ...

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

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

  9. HDU 4738 Caocao&#39;s Bridges(找割边)

    HDU 4738 Caocao's Bridges 题目链接 注意几个坑,可能重边,至少要派一个人去炸,没有连通的时候就不用炸了 代码: #include <cstdio> #includ ...

随机推荐

  1. 5.类型、值和变量-JavaScript权威指南笔记

    开始变得有意思起来了,然而第三章还是以基础知识了解的角度阐释相关的概念,并没有深入到结合代码以及要实现的功能讲用法和原理的程度. 1.概论. value:程序的运行是对值的操作. type:能够表示并 ...

  2. 死磕 java原子类之终结篇(面试题)

    概览 原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会有任何线程上下文切换. 原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可以被打乱,也不可以被切割 ...

  3. JAVA基础之Properties类、序列化流及打印流、commons-IO

    个人理解: Properties类是个存储String类型的键值对的集合类,可以用其存储一些关键的账号密码什么的,同时后面的注释可以很好的帮助理解,但是需要注意的是其文件中不能出现其他的符号:序列化与 ...

  4. html 之table标签结构学习

    一.HTML table标签结构 html 中table标签的结构情况,如下所示: <!-- table标签结构如下: <table> <thead> # thead表格 ...

  5. HDU 3652 B-number (数位DP,入门)

    题意: 如果一个整数能被13整除,且其含有子串13的,称为"B数",问[1,n]中有多少个B数? 思路: 这题不要用那个DFS的模板估计很快秒了. 状态设计为dp[位数][前缀][ ...

  6. COGS 2815. 天黑请闭眼

    ★   输入文件:jos.in   输出文件:jos.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 天亮了,请大家睁眼 昨晚是,平安夜. 处于集会中心的村民们大多数都 ...

  7. 51nod 1631 小鲨鱼在51nod小学

    基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依靠算法方面的特长,在班里担任了许多职务.   ...

  8. 使用tensorflow object_detection API训练自己的数据遇到的问题及解决方法

    1.Windows下出现找不到object_detection包的问题. 解决方法 在Anaconda3\soft\Lib\site-packages新建一个pth文件,将PedestrianDete ...

  9. [神经网络]一步一步使用Mobile-Net完成视觉识别(一)

    1.环境配置 2.数据集获取 3.训练集获取 4.训练 5.调用测试训练结果 6.代码讲解 本文是第一篇,环境配置篇. 先打开tensorflow object detection api 看看需要什 ...

  10. Mac OS X El Capitan系统完整性保护System Integrity Protection (SIP)

    http://blog.csdn.net/yulimin/article/details/49992031 引言:前段时间经历了XCode编译器代码被注入的事件后,这次 Mac OS X El Cap ...