hdu Caocao's Bridges(无向图边双连通分量,找出权值最小的桥)
/*
题意:给出一个无向图,去掉一条权值最小边,使这个无向图不再连同! 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(无向图边双连通分量,找出权值最小的桥)的更多相关文章
- hdu-4738.Caocao's Bridges(图中权值最小的桥)
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- POJ 3352 无向图边双连通分量,缩点,无重边
为什么写这道题还是因为昨天多校的第二题,是道图论,HDU 4612. 当时拿到题目的时候就知道是道模版题,但是苦于图论太弱.模版都太水,居然找不到. 虽然比赛的时候最后水过了,但是那个模版看的还是一知 ...
- Expm 9_3 无向图的双连通分量问题
[问题描述] 给定一个无向图,设计一个算法,判断该图中是否存在关节点,并划分双连通分量. package org.xiu68.exp.exp9; import java.util.Stack; p ...
- HDU 4612——Warm up——————【边双连通分量、树的直径】
Warm up Time Limit:5000MS Memory Limit:65535KB 64bit IO Format:%I64d & %I64u Submit Stat ...
- poj 2942 Knights of the Round Table(无向图的双连通分量+二分图判定)
#include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #includ ...
- Road Construction(无向图的双连通分量)
http://poj.org/problem?id=3352 题意:给出一个有n个顶点m条边的无向连通图,问至少添加几条边,使删除任意一条边原图仍连通. 思路:一个边双连通图删除任意一条边仍为连通图. ...
- [Tarjan系列] Tarjan算法求无向图的双连通分量
这篇介绍如何用Tarjan算法求Double Connected Component,即双连通分量. 双联通分量包括点双连通分量v-DCC和边连通分量e-DCC. 若一张无向连通图不存在割点,则称它为 ...
- UVALive 3523 Knights of the Round Table 圆桌骑士 (无向图点双连通分量)
由于互相憎恨的骑士不能相邻,把可以相邻的骑士连上无向边,会议要求是奇数,问题就是求不在任意一个简单奇圈上的结点个数. 如果不是二分图,一定存在一个奇圈,同一个双连通分量中其它点一定可以加入奇圈.很明显 ...
- Gym - 100712H Bridges(边—双连通分量)
https://vjudge.net/problem/Gym-100712H 题意: 给出一个图,求添加一条边后最少的桥数量. 思路: 参考了ZSQ大神的题解http://blog.csdn.net/ ...
随机推荐
- 申请Google API Key
想使用google map api 必须从google网站上获取key之后才有权限使用,但是要想申请key必须要有证明书,也就是所谓的MD5.下面一步一步来说明: 步骤1: 如果你使用的是eclips ...
- Win10 设置外网多用户远程桌面连接
主要原理:利用路由器的虚拟服务器功能,将内网的Ip地址通过端口映射提供给外网,使得外网能够访问到目的主机. 1. 配置路由器上的虚拟服务器,假设目的主机内网的ip为192.168.1.100,则配置如 ...
- 。net初学
这一周主要是对.net语法基础知识的简介以及一些作业练习,大部分还是与c语言有关联.一开始语法上有差异,写起代码来有困难,逻辑有点转换不过来.但是通过上周的练习,现在写起 作业来,还是挺快的. ...
- C++11新特性总结 (二)
1. 范围for语句 C++11 引入了一种更为简单的for语句,这种for语句可以很方便的遍历容器或其他序列的所有元素 vector<int> vec = {1,2,3,4,5,6}; ...
- 异步CTP(Async CTP)为什么那样工作?
对异步CTP感兴趣有很多原因.异步CTP使异步编程比以前更加容易了.它虽然没有Rx强大,但是更容易学.异步CTP介绍了两个新的关键字,async和await.异步方法(或Lambda表达式)必须返回v ...
- UWP的一种下拉刷新实现
简介 我们最近实现了一个在UWP中使用的下拉刷新功能,以满足用户的需求,因为这是下拉刷新是一种常见的操作方式,而UWP本身并不提供这一机制. 通过下拉刷新这一机制,可以让移动端的界面设计变得更加简单, ...
- 图解集合1:ArrayList
前言 这个分类中,将会写写Java中的集合.集合是Java中非常重要而且基础的内容,因为任何数据必不可少的就是该数据是如何存储的,集合的作用就是以一定的方式组织.存储数据.这里写的集合,一部分是比较常 ...
- Unity3D入门之Unity3D介绍以及编辑器的使用(1)
1.Unity3D介绍 Unity3D是跨平台(IOS.Android.Windows Phone.Windows.Flash.XBOX360.PS3.Wii等)游戏引擎,可以开发2D.2.5D.3D ...
- 作业七:团队项目——Alpha版本冲刺阶段-12
今日编写代码如下: class ChessRule { /**卒子的移动规则*/ public void armsRule(int Man,JLabel play,MouseEvent me){ // ...
- 关于大型网站技术演进的思考(十三)--网站静态化处理—CSI(5)
讲完了SSI,ESI,下面就要讲讲CSI了 ,CSI是浏览器端的动静整合方案,当我文章发表后有朋友就问我,CSI技术是不是就是通过ajax来加载数据啊,我当时的回答只是说你的理解有点片面,那么到底什么 ...