标签:source 双连通 cti mission sam mil name ast min
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5595 Accepted Submission(s):
1757
/* hdu4738 1.原图可能不联通 这时不需要派人去炸桥 直接输出 0 2.有重边 3.可能有权值为0的桥 但我们必须要有一个人去带炸弹啊 所以这是输出 1 */ #include<iostream> #include<cstdio> #include<cstring> #define N 1001 using namespace std; int n,m,cnt,ans,flag; int head[N],dfn[N],low[N],fa[N]; struct edge{ int u,v,w,net; }e[N*N*2]; inline int read() { int x=0,f=1;char c=getchar(); while(c>‘9‘||c<‘0‘){if(c==‘-‘)f=-1;c=getchar();} while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();} return x*f; } inline void add(int u,int v,int w) { e[++cnt].v=v;e[cnt].w=w;e[cnt].net=head[u];head[u]=cnt; } void init() { memset(low,0,sizeof low);memset(dfn,0,sizeof dfn); memset(fa,0,sizeof fa);memset(head,0,sizeof head); memset(e,0,sizeof e);cnt=flag=0; } void Tarjan(int u,int father) { dfn[u]=low[u]=++cnt; for(int i=head[u];i;i=e[i].net) { int v=e[i].v; if(i==father+1) continue; if(!dfn[v]) { Tarjan(v,i);low[u]=min(low[u],low[v]); if(low[v]>dfn[u]) ans=min(ans,e[i].w); } low[u]=min(low[u],dfn[v]);//注意 } } int main() { freopen("ly.txt","r",stdin); int x,y,z; while(1) { init(); n=read();m=read(); if(!n && !m) break; for(int i=1;i<=m;i++) { x=read();y=read();z=read(); add(x,y,z);add(y,x,z); }cnt=0; ans=0x3f3f3f3f; for(int i=1;i<=n;i++) if(!dfn[i]) flag++,Tarjan(i,-1); if(flag>1){printf("0\n");continue;} ans=ans==0x3f3f3f3f?-1:ans;ans=ans==0?1:ans; printf("%d\n",ans); } return 0; }
标签:source 双连通 cti mission sam mil name ast min
原文地址:http://www.cnblogs.com/L-Memory/p/7795287.html