Caocao's Bridges-HDU4738(Tarjin+求桥)
http://acm.hdu.edu.cn/showproblem.php?pid=4738
题目大意:
给定n个点和m条边 和每条边的价值,求桥的最小价值(最小桥)
看着挺简单的但是有好多细节:
1、会有重边
2、如果最小价值是0的话应该输出1
3、m条边有可能不能连通n个点,这个时候没有花费。
Caocao's Bridges
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3108 Accepted Submission(s): 982
In each test case:
The first line contains two integers, N and M, meaning that there are N islands and M bridges. All the islands are numbered from 1 to N. ( 2 <= N <= 1000, 0 < M <= N2 )
Next M lines describes M bridges. Each line contains three integers U,V and W, meaning that there is a bridge connecting island U and island V, and there are W guards on that bridge. ( U ≠ V and 0 <= W <= 10,000 )
The input ends with N = 0 and M = 0.
1 2 7
2 3 4
3 1 4
3 2
1 2 7
2 3 4
0 0
4
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector> using namespace std;
#define N 1010
#define INF 0x3f3f3f3f struct node
{
int to,flew,next;
}edge[N*N]; int low[N],dfn[N],Time,top,ans,Stack[N],belong[N],sum,head[N]; void Inn()
{
memset(low,,sizeof(low));
memset(dfn,,sizeof(dfn));
memset(Stack,,sizeof(Stack));
memset(belong,,sizeof(belong));
memset(head,-,sizeof(head));
Time=top=ans=sum=;
} void add(int from,int to,int flew)
{
edge[ans].to=to;
edge[ans].flew=flew;
edge[ans].next=head[from];
head[from]=ans++;
}
void Tarjin(int u,int f)
{
int v,k=;
low[u]=dfn[u]=++Time;
Stack[top++]=u;
for(int i=head[u];i!=-;i=edge[i].next)
{
v=edge[i].to;
if(v==f && !k)
{
k++;
continue;
}
if(!dfn[v])
{
Tarjin(v,u);
low[u]=min(low[u],low[v]);
}
else
low[u]=min(low[u],dfn[v]);
}
if(dfn[u]==low[u])
{
sum++;
do
{
v=Stack[--top];
belong[v]=sum;
}while(v!=u);
} } void solve(int n)
{
int k=;
int Min=INF;
for(int i=;i<=n;i++)
{
if(!dfn[i])
{
k++;
Tarjin(i,);
}
}
if(sum==)
{
printf("-1\n");
return;
}
if(k>)
{
printf("0\n");
return;
}
for(int i=;i<=n;i++)
{
for(int j=head[i];j!=-;j=edge[j].next)
{
int u=belong[i];
int v=belong[edge[j].to];
if(u!=v)
{
Min=min(Min,edge[j].flew);
}
}
}
if(Min==)
Min++;
printf("%d\n",Min);
}
int main()
{
int n,m,a,b,c,i;
while(scanf("%d %d",&n,&m),n+m)
{
Inn();
for(i=;i<m;i++)
{
scanf("%d %d %d",&a,&b,&c);
add(a,b,c);
add(b,a,c);
}
solve(n);
}
return ;
}
Caocao's Bridges-HDU4738(Tarjin+求桥)的更多相关文章
- HDU 4738 Caocao's Bridges(Tarjan求桥+重边判断)
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- Caocao's Bridges HDU - 4738 求桥
题目描述 Caocao was defeated by Zhuge Liang and Zhou Yu in the battle of Chibi. But he wouldn't give up. ...
- HDU 4738--Caocao's Bridges(重边无向图求桥)
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 2013杭州网赛 1001 hdu 4738 Caocao's Bridges(双连通分量割边/桥)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4738 题意:有n座岛和m条桥,每条桥上有w个兵守着,现在要派不少于守桥的士兵数的人去炸桥,只能炸一条桥 ...
- 【HDU 4738 Caocao's Bridges】BCC 找桥
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4738 题意:给定一个n个节点m条边的无向图(可能不连通.有重边),每条边有一个权值.判断其连通性,若双 ...
- Caocao's Bridges HDU - 4738 找桥
题意: 曹操在赤壁之战中被诸葛亮和周瑜打败.但他不会放弃.曹操的军队还是不擅长打水仗,所以他想出了另一个主意.他在长江上建造了许多岛屿,在这些岛屿的基础上,曹操的军队可以轻易地攻击周瑜的军队.曹操还修 ...
- HDU 4738 Caocao's Bridges taijan (求割边,神坑)
神坑题.这题的坑点有1.判断连通,2.有重边,3.至少要有一个人背*** 因为有重边,tarjan的时候不能用子结点和父节点来判断是不是树边的二次访问,所以我的采用用前向星存边编号的奇偶性关系,用^1 ...
- HDU4738:Caocao's Bridges(求桥)
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 4738 Caocao's Bridges (2013杭州网络赛1001题,连通图,求桥)
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
随机推荐
- poj2393 Yogurt factory
思路: 贪心. 实现: #include <iostream> #include <cstdio> #include <algorithm> using names ...
- vue 2.0 路由创建的详解过程
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 图解 TCP/IP 第六章 TCP与UDP 笔记6.1 传输层的作用
图解 TCP/IP 第六章 TCP与UDP 笔记6.1 传输层的作用 传输层必须指出这个具体的程序,为了实现这一功能,使用端口号这样一种识别码.根据端口号,就可以识别在传输层上一层的应用程 ...
- Objective-C Foundation 框架 Example :Looking for Files 查找文件
Objective-C Foundation 框架 Example :Looking for Files 查找文件 NSFileManager. The NSFileManager class ...
- Apache与IIS端口冲突解决方法
在安装Apache或者php集成环境包是经常会遇到Apache的80端口被占用导致无法正常启动Apache. Win7可以通过如下方法解决(如果坚持要使用80端口的话): 1.打开"控制面板 ...
- Log4net快速搭建
nuget安装log4net 2018.12.10当前版本为2.0.8 找到所在项目的[Properties->AssemblyInfo] 在底部加上 [assembly: log4net.Co ...
- WEB下的excel批量导入功能
新手学习中,记录一下excel导出功能实现的整个流程.使用框架ssm. control层 importExcel+parseDataItem: @RequestMapping("import ...
- Discuz!代码
我如何使用Discuz!代码 Discuz!代码 效果 [b]粗体文字 Abc[/b] 粗体文字 Abc [i]斜体文字 Abc[/i] 斜体文字 Abc [u]下划线文字 Abc[/u] 下划线 ...
- CAD嵌套打印(网页版)
当用户需要打印两个CAD控件的图纸时,可以采用嵌套打印实现.点击此处在线演示. 实现嵌套打印功能,首先将两个CAD控件放入网页中,js代码如下: <p align="center&qu ...
- 双引号" "和单引号' '区别
双引号是字符串,单引号是字符 “\n”与'\n': 相同点: 都能起到换行作用 不同点: "\n" <=> {'\n', '\0'} '\n' <=> ...