Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
57590 | 陶俊宸 | 最小差值生成树 | C++ | 通过 | 100 | 65 MS | 328 KB | 762 | 2022-08-05 20:26:15 |
#include<bits/stdc++.h> using namespace std; int n,m,a,b,c,f[5000],ans; struct edge{ int a,b,c; }e[5000]; bool cmp(edge e1,edge e2){ return e1.c<e2.c; } int finddad(int x){ if(f[x]==x) return x; return finddad(f[x]); } int main(){ scanf("%d %d",&n,&m); for(int i=0;i<m;i++){ scanf("%d %d %d",&e[i].a,&e[i].b,&e[i].c); e[i].a--,e[i].b--; } sort(e,e+m,cmp); for(int i=0;i<m;i++){ int ln=n-1; for(int i=0;i<n;i++) f[i]=i; for(int j=i;j<m;j++){ int fa=finddad(e[j].a),fb=finddad(e[j].b); if(fa!=fb){ f[fb]=fa; ln--; } if(!ln){ if(!i) ans=e[j].c-e[i].c; ans=min(ans,e[j].c-e[i].c); break; } } if(ln){ if(!i) ans=-1; break; } } printf("%d",ans); return 0; }