紫書uva1395(苗條的生成樹)
阿新 • • 發佈:2019-01-12
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int inf=0x3f3f3f3f; int n,m,a,b,len,pre[110]; struct node { int d1,d2,l; }e[10010]; bool com(node x,node y) { return x.l<y.l; } int fin(int x) { int p,a; p=x; while(x!=pre[x]) x=pre[x]; while(p!=x) { a=pre[p]; pre[p]=x; p=a; } return x; } void work(int x) { int u=fin(e[x].d1); int v=fin(e[x].d2); if(u!=v) { if(u>v) swap(u,v); pre[v]=u; } fin(e[x].d1);fin(e[x].d2); } void work_pre() { for(int i=0;i<=n;i++) pre[i]=i; } int main() { while(~scanf("%d%d",&n,&m)) { if(n==0&&m==0) break; for(int i=0;i<m;i++) scanf("%d%d%d",&e[i].d1,&e[i].d2,&e[i].l); sort(e,e+m,com); int flag=0; for(int i=0;i<=n;i++) pre[i]=i; int ans=inf; for(int i=0;i<m;i++) { work_pre(); work(i); for(int j=i;j<m;j++) { work(j); int no=0; for(int k=1;k<=n;k++) { if(fin(k)!=1) { no=1; break; } } if(no==0) { ans=min(ans,(e[j].l-e[i].l)); break; } if(j==(m-1)&&no) { flag=1; break; } } if(flag) break; } if(ans==inf) printf("-1\n"); else printf("%d\n",ans); } return 0; }