hdu 4738 Caocao's Bridges(2013杭州网络赛丶神坑)
就是求最小权值的桥。。不过有好几个坑。。。
1:原图不连通,ans=0.
2: m<=n^2 显然有重边,重边必然不是桥,处理重边直接add(u, v, INF).
3: 最小桥边权为0的时候,ans=1,至少要派一个人运炸弹。。。
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<queue>
#include<stack>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<fstream>
#include<sstream>
#include<map>
#include<set>
using namespace std; const int N = 1111;
const int INF = 100000000;
int n, m;
int pre[N], low[N], dfs_clock;
int bccno[N], vis[N], wi[N][N], g[N][N];
struct Edge
{
//flag = 1 ->bridge
int from, to, w, flag;
};
vector<int> G[N];
vector<Edge> edges; //add bidir edge
void addedge(int u, int v, int w)
{
edges.push_back((Edge){u, v, w, 0});
edges.push_back((Edge){v, u, w, 0});
int nima = edges.size();
G[u].push_back(nima-2);
G[v].push_back(nima-1);
} int dfs(int u, int fa)
{
int lowu = pre[u] = ++dfs_clock;
int sz = G[u].size();
for(int i=0; i<sz; i++)
{
int v = edges[G[u][i]].to;
if(!pre[v])
{
int lowv = dfs(v, u);
lowu = min(lowu, lowv);
if(lowv > pre[u]) edges[G[u][i]].flag = 1, edges[G[u][i]^1].flag = 1;
}
else if(pre[v] < pre[u] && v != fa) lowu = min(lowu, pre[v]);
}
return low[u] = lowu;
} void dfs1(int u)
{
vis[u] = 1;
int sz = G[u].size();
for(int i=0; i<sz; i++)
{
Edge e = edges[G[u][i]];
int v = e.to;
if(!vis[v]) dfs1(v);
}
}
int u, v, w; int main()
{
while(scanf("%d%d", &n, &m), n+m)
{
for(int i=0; i<n+1; i++) G[i].clear();
edges.clear();
memset(g, 0, sizeof(g));
for(int i=0; i<m; i++)
{
scanf("%d%d%d", &u, &v, &w); u--; v--;
g[u][v]++; //BIANSHU
g[v][u]++;
wi[u][v] = w;
} //CHONG BIAN
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
{
if(g[i][j] == 1) addedge(i, j, wi[i][j]);
else if(g[i][j] > 1) addedge(i, j, INF);
} //BU LIANTONG
memset(vis, 0, sizeof(vis));
dfs1(0);
bool flag = 0;
for(int i=0; i<n; i++)
{
if(!vis[i])
{
flag = 1;
break;
}
}
if(flag)
{
puts("0");
continue;
}
//QIAO
memset(pre, 0, sizeof(pre));
dfs_clock = 0;
for(int i=0; i<n; i++) if(!pre[i]) dfs(i, -1);
int ans = INF;
int sz = edges.size();
for(int i=0; i<sz; i++) if(edges[i].flag == 1) ans = min(ans, edges[i].w);
if(ans == INF) puts("-1");
else printf("%d\n", ans == 0 ? 1 : ans); //0 -> 1
}
return 0;
}
hdu 4738 Caocao's Bridges(2013杭州网络赛丶神坑)的更多相关文章
- HDU 4745 Two Rabbits (2013杭州网络赛1008,最长回文子串)
Two Rabbits Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Tota ...
- HDU 4738 Caocao's Bridges taijan (求割边,神坑)
神坑题.这题的坑点有1.判断连通,2.有重边,3.至少要有一个人背*** 因为有重边,tarjan的时候不能用子结点和父节点来判断是不是树边的二次访问,所以我的采用用前向星存边编号的奇偶性关系,用^1 ...
- HDU 4738 Caocao's Bridges (2013杭州网络赛1001题,连通图,求桥)
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- Hdu 4738 Caocao's Bridges (连通图+桥)
题目链接: Hdu 4738 Caocao's Bridges 题目描述: 有n个岛屿,m个桥,问是否可以去掉一个花费最小的桥,使得岛屿边的不连通? 解题思路: 去掉一个边使得岛屿不连通,那么去掉的这 ...
- HDU 4747 Mex (2013杭州网络赛1010题,线段树)
Mex Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submis ...
- HDU 4741 Save Labman No.004 (2013杭州网络赛1004题,求三维空间异面直线的距离及最近点)
Save Labman No.004 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU 4739 Zhuge Liang's Mines (2013杭州网络赛1002题)
Zhuge Liang's Mines Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- HDU 4763 Theme Section (2013长春网络赛1005,KMP)
Theme Section Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- HDU 4759 Poker Shuffle(2013长春网络赛1001题)
Poker Shuffle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
随机推荐
- JS的匿名函数和递归应用
今天有项目需要用到JS的递归,开始按照php的实现方法,发现不行,后来只能使用arguments.callee. 简单的例子,如下 var act = 'if(num <= 1){return ...
- WinCE 5.0模拟器,在 win7 下安装后, VS2008里不显示
来源:http://blog.csdn.net/masterlonely/article/details/8302932 现状: Win7 32位旗舰版 VS2008 Team 在安装了: Windo ...
- 解决IE8下VS2005,VS2008一些向导提示脚本错误问题
Some VS2005 and VS2008 Wizards Pop Up Script Error. Visual C++ team has discovered that after inst ...
- crt 糟心的配置
每次要下载安装crt就要捣鼓半天,各种注册机下来各种问题,顺手记录下刚打通的一个 1.crt 下载 网上看了一遍博客: SecureCRT 7.3.4破解版(含注册机), 下载下来后里面其实是不含注册 ...
- cv2.imread BGR模式
openCV 的cv2.imread()导入图片时是BGR通道顺序,这与Matplotlib的显示,或者读取图片的通道不同,如果需要可以转换为RGB模式,以下代码显示不同之处,但BGR在许多地方使用, ...
- MCI 函数与命令
Microsoft 提供的 MMSYSTEM.H 文件中定义了调用 MCI 功能的数据类型和函数原型.在使用 MCI 功能的任何源模块中都应包含该文件. 1. MCI 函数 所有的 MCI 函数名都以 ...
- 如何让多个不同版本的jquery库共存
问题描述:公司的登录接口使用的是jquery1.4.2,因为我要使用一个jquery.pagination的分页控件(jquery1.7.2).如果我使用了1.7.2,登录接口会有问题. <sc ...
- uestc Palindromic String
字符串hash因为如果一个字符串是回文串,那么正着做哈希和反着做哈希结果应该一样.于是我们先正反各做一边哈希.如果判断出来一个字符串是回文穿那么这个字符串的前半部分和后半部分的重数一定相同,于是当前位 ...
- 深入理解java虚拟机---读后笔记(垃圾回收)
运行时数据区,主要包括方法区.虚拟机栈.本地方法栈.堆.程序计数器,该部分内存都是线程隔离的. 然后和其交互的有执行引擎.本地库接口,此部分线程之间是可以共享的. 1. 引用计数算法 给对象添加一个引 ...
- 游戏开场镜头拉近(Unity3D开发之四)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/? p=553 今天看了个Demo.发现 ...