提交时间:2022-08-03 19:15:33

运行 ID: 57111

#include<bits/stdc++.h> using namespace std; struct edge{ int u,v,w; bool operator< (const edge temp)const{ return w<temp.w; } }a[5001]; int n,m,ans=0x3f3f3f3f; int f[101]; void init(){ for(int i=1;i<=n;i++) f[i]=i; } int find(int x){ if(f[x]!=x) f[x]=find(f[x]); return f[x]; } void Kruskal(){ for(int i=1;i<=m;i++){ int cnt=0; init(); for(int j=i;j<=m;j++){ int t1=find(a[j].u),t2=find(a[j].v); if(t1==t2) continue; f[t2]=t1,cnt++; if(cnt==n-1){ ans=min(ans,a[j].w-a[i].w); break; } } if(cnt!=n-1){ if(i==1) ans=-1; return; } } } int main(){ cin>>n>>m; for(int i=1;i<=m;i++) cin>>a[i].u>>a[i].v>>a[i].w; sort(a+1,a+m+1); Kruskal(); cout<<ans; return 0; }