提交时间:2022-08-06 21:32:30

运行 ID: 57708

#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; }