/*
题意:给出一个无向图,去掉一条权值最小边,使这个无向图不再连同! tm太坑了...
1,如果这个无向图开始就是一个非连通图,直接输出0
2,重边(两个节点存在多条边, 权值不一样)
3,如果找到了桥的最小权值为0,也就是桥上的士兵数为0,那么还是要最少派一个
士兵过去炸掉桥! 思路:假设每两个节点最多只有一条边进行相连!
进行tarjan算法,如果该算法调用了超过2次,说明这个原图就是不连通的!
否则在tarjan算法中将桥存起来!然后我们遍历每一座桥,看一看我们找到的
桥(连接的两个定点分别是u, v)是不是(u, v)只有一条路相连接,如果是的,
那么就跟新最小值!
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define M 1000005
#define INF 0x3f3f3f3f
#define N 1005
using namespace std;
struct EDGE{
int u, v, w, nt;
EDGE(){}
EDGE(int u, int v, int w, int nt){
this->u=u;
this->v=v;
this->w=w;
this->nt=nt;
}
}; EDGE edge[M];
EDGE brige[M];
int first[N];
int low[N], pre[N];
int dfs_clock;
int n, m, cnt, ret; void tarjan(int u, int fa){
low[u]=pre[u]=++dfs_clock;
for(int e=first[u]; e!=-; e=edge[e].nt){
int v=edge[e].v; if(!pre[v]){
tarjan(v, u);
low[u]=min(low[u], low[v]);
if(low[v]>pre[u])
brige[ret++]=edge[e];
}
else if(v!=fa && pre[u]>pre[v])
low[u]=min(low[u], pre[v]);
}
} int main(){
while(scanf("%d%d", &n, &m) && (n||m)){
memset(first, -, sizeof(first));
cnt=;
while(m--){
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
edge[cnt]=EDGE(u, v, w, first[u]);
first[u]=cnt++;
edge[cnt]=EDGE(v, u, w, first[v]);
first[v]=cnt++;
}
dfs_clock=;
ret=;
memset(low, , sizeof(low));
memset(pre, , sizeof(pre));
int flag=;
for(int i=; i<=n; ++i)
if(!pre[i]){
++flag;
if(flag==) break;
tarjan(i, -);
} int minNum=INF;
if(flag==) minNum=;
else{
for(int i=; i<ret; ++i)
if(brige[i].w<minNum){//对假定的桥判断
int cc=;
for(int e=first[brige[i].u]; e!=-; e=edge[e].nt)
if(edge[e].v==brige[i].v) ++cc;
if(cc==) minNum=brige[i].w;//说明是真正的桥
}
if(minNum==INF) minNum=-;
else if(minNum==) minNum=;//这一句不要忘记了!
}
printf("%d\n", minNum);
}
return ;
}

hdu 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. POJ 3352 无向图边双连通分量,缩点,无重边

    为什么写这道题还是因为昨天多校的第二题,是道图论,HDU 4612. 当时拿到题目的时候就知道是道模版题,但是苦于图论太弱.模版都太水,居然找不到. 虽然比赛的时候最后水过了,但是那个模版看的还是一知 ...

  3. Expm 9_3 无向图的双连通分量问题

      [问题描述] 给定一个无向图,设计一个算法,判断该图中是否存在关节点,并划分双连通分量. package org.xiu68.exp.exp9; import java.util.Stack; p ...

  4. HDU 4612——Warm up——————【边双连通分量、树的直径】

    Warm up Time Limit:5000MS     Memory Limit:65535KB     64bit IO Format:%I64d & %I64u Submit Stat ...

  5. poj 2942 Knights of the Round Table(无向图的双连通分量+二分图判定)

    #include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #includ ...

  6. Road Construction(无向图的双连通分量)

    http://poj.org/problem?id=3352 题意:给出一个有n个顶点m条边的无向连通图,问至少添加几条边,使删除任意一条边原图仍连通. 思路:一个边双连通图删除任意一条边仍为连通图. ...

  7. [Tarjan系列] Tarjan算法求无向图的双连通分量

    这篇介绍如何用Tarjan算法求Double Connected Component,即双连通分量. 双联通分量包括点双连通分量v-DCC和边连通分量e-DCC. 若一张无向连通图不存在割点,则称它为 ...

  8. UVALive 3523 Knights of the Round Table 圆桌骑士 (无向图点双连通分量)

    由于互相憎恨的骑士不能相邻,把可以相邻的骑士连上无向边,会议要求是奇数,问题就是求不在任意一个简单奇圈上的结点个数. 如果不是二分图,一定存在一个奇圈,同一个双连通分量中其它点一定可以加入奇圈.很明显 ...

  9. Gym - 100712H Bridges(边—双连通分量)

    https://vjudge.net/problem/Gym-100712H 题意: 给出一个图,求添加一条边后最少的桥数量. 思路: 参考了ZSQ大神的题解http://blog.csdn.net/ ...

随机推荐

  1. javascript练习-定义子类

    function defineSubclass(superclass, //父类的构造函数 constructor, //新的子类的构造函数 methods, //实例方法:复制至原型中 static ...

  2. Java学习笔记二——标识符和关键字

    标识符 定义 标识符的定义:对各种变量.方法和类等要素命名时使用的字符序列成为标识符. 简单地说,就是凡是自己可以起名字的地方都叫标识符,都要遵守标识符的规则. 命名规则 标识符只能由字母.下划线&q ...

  3. Inno调用dll --- 实现背景播放音乐

    Inno 播放音乐可以调用系统api函数mciSendString来实现,而mciSendString函数存在C:\Windows\System32\winmm.dll中,因此最终只要成功从该dll文 ...

  4. caffe 在window下编译(windows7, cuda8.0,matlab接口编译)

    1. 环境:Windows7,Cuda8.0,显卡GTX1080,Matlab2016a,VS2013 (ps:老板说服务器要装windows系统,没办法,又要折腾一番,在VS下编译好像在cuda8. ...

  5. OSD磁盘日常监控

    摘要:对ceph OSD磁盘,做好定期的性能数据采集和通电时长管理,长期的数据积累对磁盘的性能与生命周期管理会有一定帮助,同时也能确保整个集群性能的稳定. 磁盘碎片管理 查看磁盘碎片 # xfs_db ...

  6. libmegjb.so加载问题调试和分析

    欢迎转载opendevkit文章, 文章原始地址: http://www.opendevkit.com/?e=70 01-01 00:09:21.084: D/dalvikvm(10394): Try ...

  7. Disabling default console handler in Java Logger by codes

    The open source packages usu. relies on log4j or Java Logger to print logs, by default the console h ...

  8. JDK 对应的设计模式

    一.设计模式是什么 (1)反复出现问题的解决方案 (2)增强软件的灵活性 (3)适应软件不断变化二.学习JDK中设计模式的好处 (1)借鉴优秀代码的设计,有助于提高代码设计能力 (2)JDK的设计中体 ...

  9. Mroonga 3.0.8 发布,MySQL 存储引擎

    Mroonga 3.0.8 支持 REPAIR TABLE 支持损坏的 groonga 数据库. Mroonga 是一个 MySQL 存储引擎,基于 Groonga,提供完整的全文搜索引擎.

  10. Intellij IDEA工具Java web 环境搭建

    Java web 环境搭建 环境依赖 操作系统:Windows 7 64位 开发工具:IntelliJ IDEA 13.1.4 开发工具依赖环境 JDK版本:1.7+ 开发工具依赖插件 包管理:Mav ...