九野的博客,转载请注明出处:http://blog.csdn.net/acmmmm/article/details/11711577

题意:给定n个点,m条无向边

下面m行表示u , v ,边权值

求所有桥中最小的桥的权值,如不存在输出-1

若图一开始就不连通或最小权值为0则输出1

双连通求桥裸题

附赠一大波测试数据:

#include <string.h>
#include <cstdio>
#include <vector>
#define N 1010
#define inf 10000000
using namespace std;
inline int Min(int a,int b){return a>b?b:a;}
vector<int>G[N];
int dis[N][N],bian[N][N];
int n,m,f[N];
int find(int x){return x==f[x]?x:f[x]=find(f[x]);}
void Union(int u,int v){
int fa=find(u),fb=find(v);
f[fa]=fb;
} struct node{
int u,v,d;
}edge[N];//割边不会超过n条
int edgenum;
void PUT(int u,int v,int d){
node E={u,v,d};
edge[edgenum++]=E;
}
int pre[N],low[N],dfs_clock;
bool su;
int dfs(int u,int fa){//是连通图,dfs(u, )目的是寻找u的后代所能连回的(最早的祖先)的pre值
if(su)return 0;
int lowu=pre[u]= ++ dfs_clock;
int child=0;
for(int i=0;i<G[u].size();i++){
int v=G[u][i];
if(!pre[v])
{
child++;
int lowv=dfs(v,u);
lowu = Min(lowu, lowv);
if(lowv > pre[u]&&bian[u][v]==1){PUT(u,v,dis[u][v]);if(dis[u][v]<=1)return 0;}
}
else if(pre[v] < pre[u] && v!=fa)
lowu = Min(lowu, pre[v]);
}
return low[u]=lowu;
}
void findcut(){
memset(pre,0,sizeof(pre));
dfs_clock=0;
dfs(1,-1);//dfs(树根,树根的父亲是-1)
}
int main(){
int i,u,v,d;
while(scanf("%d %d",&n,&m),n)
{
memset(bian,0,sizeof(bian));
for(i=1;i<=n;i++)
{
G[i].clear();
f[i]=i;
for(int j=1;j<=n;j++)
dis[i][j]=inf;
} while(m--)
{
scanf("%d %d %d",&u,&v,&d);
if(dis[u][v]==inf)
{
G[u].push_back(v); G[v].push_back(u);
Union(u,v);
}
dis[u][v]=dis[v][u]=Min(dis[u][v],d);
bian[u][v]++; bian[v][u]++;
} bool fa=false; find(1);
for(i=1;i<=n;i++)if(find(i)!=f[1]){fa=true;break;}
if(fa){printf("0\n");continue;} su=false;
edgenum=0;
findcut(); if(edgenum)
{
int ans=inf;
for(i=0;i<edgenum;i++)ans=Min(ans,edge[i].d);
if(ans==inf)ans=-1;
else if(ans==0)ans=1;
printf("%d\n",ans);
}
else printf("-1\n");
}
return 0;
}
/*
3 3
1 2 7
2 3 4
3 1 4 3 2
1 2 7
2 3 4 3 4
1 2 7
2 1 7
2 3 4
3 2 4 4 3
1 2 1
1 2 3
3 4 4 4 4
1 2 1
1 2 3
3 4 4
2 4 6 4 5
1 2 1
1 2 3
3 4 4
2 4 6
1 3 0 4 5
4 3 0
3 4 4
2 4 6
2 3 0
1 3 0 2 1
1 2 0 4 2
1 2 3
1 3 5 4 5
1 2 3
2 3 4
1 3 5
4 3 7
4 3 6 4 4
1 2 3
2 3 4
1 3 5
4 3 6 4 4
1 2 4
1 3 5
4 3 6
3 4 7 6 7
1 2 1
1 3 2
2 3 3
3 4 4
4 6 5
4 5 6
5 6 7 5 6
1 2 3
1 3 4
2 3 5
3 4 7
3 5 8
5 4 9 8 9
1 8 1
5 1 2
1 7 3
1 4 4
1 2 5
4 3 6
3 2 7
5 6 8
6 7 9 6 6
1 4 1
1 2 4
2 5 4
5 6 4
3 6 4
4 3 2 6 5
1 2 4
2 5 4
5 6 4
3 6 4
4 3 2 8 10
1 8 1
5 1 2
1 7 3
1 4 4
1 2 5
4 3 6
3 2 7
5 6 8
6 7 9
8 1 2 3 3
1 2 7
1 3 1
1 3 4 0 0
*/

HDU 4738 双连通模版题的更多相关文章

  1. HDU 4005 The war(双连通好题)

    HDU 4005 The war pid=4005" target="_blank" style="">题目链接 题意:给一个连通的无向图.每条 ...

  2. hdu 4738 (双联通求桥)

    2013 ACM/ICPC Asia Regional Hangzhou Online 题目大意:有n个岛,曹操在一些岛之间建了一些桥,每个桥上有一些士兵把守,周瑜只有一个炸弹只能炸掉一个桥,炸弹需要 ...

  3. HDU 4738 双连通分量 Caocao's Bridges

    求权值最小的桥,考虑几种特殊情况: 图本身不连通,那么就不用派人去了 图的边双连通分量只有一个,答案是-1 桥的最小权值是0,但是也要派一个人过去 #include <iostream> ...

  4. hdu 3065 AC自动机模版题

    题意:输出每个模式串出现的次数,查询的时候呢使用一个数组进行记录就好. 同上题一样的关键点,其他没什么难度了. #include <cstdio> #include <cstring ...

  5. HDU——1005Number Sequence(模版题 二维矩阵快速幂+操作符重载)

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  6. hdu 2222(AC自动机模版题)

    Keywords Search Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others ...

  7. HDU 2222 AC自动机模版题

    所学的AC自动机都源于斌哥和昀神的想法. 题意:求目标串中出现了几个模式串. 使用一个int型的end数组记录,查询一次. #include <cstdio> #include <c ...

  8. hdu 2896 AC自动机模版题

    题意:输出出现模式串的id,还是用end记录id就可以了. 本题有个关键点:“以上字符串中字符都是ASCII码可见字符(不包括回车).”  -----也就说AC自动机的Trie树需要128个单词分支. ...

  9. HDU 2222 AC自动机(模版题)

    Keywords Search Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others ...

随机推荐

  1. 带你一起Piu Piu Piu~

    单刀直入,今天要讲的是自己写的一个WPF动画例子.我们在看下最终效果~ 最近在重看WPF编程宝典2010,在练习第15章动画性能例子时有了些想法.原始例子如下:  原始例子(打包了整个15章的) 它是 ...

  2. Tomcat+redis+nginx配置

    为客户开发的一个绩效系统,采用了java web的开发方式,使用了一些spring mvc, mybatis之类的框架.相比于oracle ebs的二次开发,这种开发更加灵活,虽然和ebs集成的时候遇 ...

  3. nginx 重写 rewrite 基础及实例(转)

    nginx rewrite 正则表达式匹配 大小写匹配 ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配 -f和!-f用来判断是否 ...

  4. [HDU 4666]Hyperspace[最远曼哈顿距离][STL]

    题意: 许多 k 维点, 求这些点之间的最远曼哈顿距离. 并且有 q 次操作, 插入一个点或者删除一个点. 每次操作之后均输出结果. 思路: 用"疑似绝对值"的思想, 维护每种状态 ...

  5. NS2 nam中节点及数据流颜色设置

    NS2 节点颜色设置在http://hi.baidu.com/jrwen0/item/d105c642f4c3ce36fb89601b说明的比較具体,大家能够參见. 我这里想说的是数据流颜色的设置,相 ...

  6. Sql server 事务 存储过程

    事务( Transaction )是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位. 通过事务,SQL Server能将逻辑相关的一组操作绑定在一起, ...

  7. hdu4725 The Shortest Path in Nya Graph【最短路+建图】

    转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4297574.html      ---by 墨染之樱花 题目链接:http://acm.hdu ...

  8. 用户登录session_id观看

    通过使用浏览器firefox或者google看cookie id, 这样就知道登录状态怎么样了

  9. C#中的虚方法和抽象方法(Thirteenth Day)

    今天在云和学院学了很多,我这次只能先总结一下C#中的虚方法和抽象的运用. 理论: 虚方法: •用virtual修饰的方法叫做虚方法 •虚方法可以在子类中通过override关键字来重写 •常见的虚方法 ...

  10. 比赛F-F Perpetuum Mobile

    比赛F-F     Perpetuum Mobile 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=86640#problem/ ...