HDU4738 Caocao's Bridges 无向图的桥
2016-05-17 22:59
423 查看
一眼题:找所有的桥,然后求最小权值
但是有很多坑点
1:如果本来不联通 输出0,(这个坑我知道)
2:但是还有一个坑,就是当整个连通,最小桥的权值是0时,也必须派一个人去,wa了无数遍(还是太年轻)
View Code
但是有很多坑点
1:如果本来不联通 输出0,(这个坑我知道)
2:但是还有一个坑,就是当整个连通,最小桥的权值是0时,也必须派一个人去,wa了无数遍(还是太年轻)
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <string> #include <stack> #include <vector> #include <map> #include <queue> #include <algorithm> #include <utility> using namespace std; typedef long long LL; const int N=1e3+5; const int INF=0x3f3f3f3f; struct Edge{ int w,v,next; }edge[N*N*2]; int head ,tot,n,m; void add(int u,int v,int w){ edge[tot].w=w; edge[tot].v=v; edge[tot].next=head[u]; head[u]=tot++; } bool instack ; int dfn ,low ,clk,cnt,ans; void targin(int u,int f){ dfn[u]=low[u]=++clk; bool flag=1; for(int i=head[u];~i;i=edge[i].next){ int v=edge[i].v; if(flag&&v==f){ flag=0;continue; } if(!dfn[v]){ targin(v,u); low[u]=min(low[u],low[v]); if(low[v]>dfn[u]){ ans=min(ans,edge[i].w); } } else if(dfn[v]<low[u])low[u]=dfn[v]; } } int main() { while(~scanf("%d%d",&n,&m)){ if(!n&&!m)break; memset(head,-1,sizeof(head)); memset(dfn,0,sizeof(dfn)); tot=clk=0;ans=INF; for(int i=1;i<=m;++i){ int u,v,w; scanf("%d%d%d",&u,&v,&w); add(u,v,w);add(v,u,w); } bool flag=0; for(int i=1;i<=n;++i) if(!dfn[i]){ targin(i,-1); if(i>1)flag=1; } if(flag)ans=0; else if(ans==0)ans=1; if(ans==INF)printf("-1\n"); else printf("%d\n",ans); } return 0; }
View Code
相关文章推荐
- 软件开发方法
- 百度相册宣布关闭
- 百度相册宣布关闭
- WordPress插件 Foxlogin 连接腾讯QQ与新浪微博接入登录[v4.0]
- 学习日记1
- c++对象导出到lua
- C++中getline函数用法(修正调试ok)
- 作业8 单元测试练习
- hdoj2034
- WordPress插件 WP Rocket 缓存火箭加速优化插件 [更新至v2.7.4]
- Tornado X MVC
- MikuMikuDance中对于Local和Global旋转方式的特殊处理
- 《快学Scala》第九章习题解答
- postgresql.conf配置
- virtualbox 动态增大虚拟硬盘大小的方法和步骤(linux VM)
- jQuery中使用ajax对表单数据进行异步验证
- 最简单的触发器
- Android开发:用OpenGL ES实现GLSurfaceView背景透明
- 使用FilenameFilter过滤出文件夹下的指定文件
- Hive 的Thrift服务