/*
题意:给出一个无向图,去掉一条权值最小边,使这个无向图不再连同! 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. 如何运用boolean跳出循环

    用布尔类型跳出循环:1.首先申明一个布尔变量:boolean y =false:申明位置在:方法内,循环外:public void s(){//在此申明布尔变量:for(){}}if(!y){}2,进 ...

  2. Python成长笔记 - 基础篇 (十)

    本节内容 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queu ...

  3. hdu 4982 Goffi and Squary Partition

    Goffi and Squary Partition Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Subm ...

  4. Windows的bat脚本中for循环

    转载至 http://123304258.blog.163.com/blog/static/12354702012621103256608/   [删除目录下某种格式的文件 ] for /r  f:\ ...

  5. Android性能优化典范第二季

      Google前几天刚发布了Android性能优化典范第2季的课程,一共20个短视频,包括的内容大致有:电量优化,网络优化,Wear上如何做优化,使用对象池来提高效率,LRU Cache,Bitma ...

  6. 【菜鸟玩Linux开发】在Linux中使用VS Code编译调试C++项目

    最近项目需求,需要在Linux下开发C++相关项目,经过一番摸索,简单总结了一下如何通过VS Code进行编译调试的一些注意事项. 关于VS Code在Linux下的安装这里就不提了,不管是CentO ...

  7. Expression Tree 扩展MVC中的 HtmlHelper 和 UrlHelper

    表达式树是LINQ To everything 的基础,同时各种类库的Fluent API也 大量使用了Expression Tree.还记得我在不懂expression tree时,各种眼花缭乱的A ...

  8. 动态绑定HTML

    在Web前端开发中,我们经常会遇见需要动态的将一些来自后端或者是动态拼接的HTML字符串绑定到页面DOM显示,特别是在内容管理系统(CMS:是Content Management System的缩写) ...

  9. angularjs之browserTrigger

    今天推荐一款来自angularjs源码的单元测试辅助库browserTrigger,这是来自于ngScenario的一段代码.主要用户触发浏览器型行为更新ng中scope view model的值. ...

  10. HTTP协议解析

    1. HTTP版本 HTTP/1.0 HTTP/1.1 HTTP-NG 2. 会话方式 HTTP/1.0 建立连接->请求->响应->断开连接 每次连接只处理一次请求和相应,对资源的 ...