Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
57708 | 杨中琦 | 最小差值生成树 | C++ | 通过 | 100 | 19 MS | 320 KB | 741 | 2022-08-06 21:32:30 |
#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; }