【tarjan】【桥】
2015-09-02 10:01
555 查看
#include <iostream> #include <cstring> #include <cmath> #include <queue> #include <stack> #include <list> #include <map> #include <set> #include <string> #include <cstdlib> #include <cstdio> #include <algorithm> using namespace std; //hdu4378 #define rep(i,a,n) for (int i=a;i<n;i++) #define per(i,a,n) for (int i=n-1;i>=a;i--) #define mp push_back int n,m; int times; int top; int sccnum; const int N = 1010; const int M = 1010 * 1010; struct Edge { int to,next,w,id; }edge[M]; struct Bridge { int u,v,w; }bri[M]; int brinum; int len; int vis ; int low ; bool inst ; int myst ; int H ; void addedge(int u,int v,int w,int id) { edge[len].to = v; edge[len].w = w; edge[len].id = id; edge[len].next = H[u]; H[u] = len++; } void tarjan(int u,int ei) { vis[u] = low[u] = ++times; inst[u] = true; myst[top++] = u; for(int i=H[u];~i;i=edge[i].next) { int v = edge[i].to; if(edge[i].id == ei) continue; if(vis[v] == -1) { tarjan(v,edge[i].id); low[u] = min(low[u],low[v]); if(low[v] > vis[u]) { bri[brinum].u = u; bri[brinum].v = v; bri[brinum].w = edge[i].w; brinum ++; } } else //if() { low[u] = min(low[u],vis[v]); } } int t; } void solve(int n) { int cnt = 0; for(int i=1;i<=n;i++) { if(vis[i] == -1) { tarjan(i,-1); cnt ++; if(cnt > 1) break; } } if(cnt > 1) { printf("0\n"); return ; } if(brinum == 0) { printf("-1\n"); return ; } int mins = 0x3f3f3f3f; for(int i=0;i<brinum;i++) { mins = min(mins,bri[i].w); } if(mins == 0) mins ++; printf("%d\n",mins); } int main() { while(scanf("%d%d",&n,&m)) { if(n == 0 && m == 0) break; len = 0; times = 0; brinum = 0; top = 0; memset(vis,-1,sizeof(vis)); memset(inst,0,sizeof(inst)); memset(H,-1,sizeof(H)); for(int i=1;i<=m;i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); addedge(u,v,w,i); addedge(v,u,w,i); } solve(n); } return 0; }
相关文章推荐
- mac下配置eclipse的maven环境
- Mysql数据迁移
- 面试题整理(一)
- int与Integer的区别
- Windows系统下查看端口占用
- RAID入门一页通,最全的RAID技术、原理图解
- 单件模式(singleton pattern)
- 【通过做专题研习Android】知识点:SharedPreferences
- 项目经验:GIS<MapWinGIS>建模第七天
- C-6 南北方饮食文化不同的案例
- asp.net正则表达式学习例子
- Docker RestApi Create mysql Container
- 回收废旧镁铬砖便宜了谁?
- python 中捕捉并打印异常
- redis 如何处理客户端连接
- PHP获取文件扩展名的五种方式
- Python2.7下载微信公众号文章的图片
- jsp 页面刷新,EasyUI刷新、加载
- jQuery的.bind()、.live()和.delegate()之间区别
- HDU4171--bfs+树