原题链接:CCF-CSP 201812-4 数据中心
纯纯的kruscal
#include <bits/stdc++.h>
using namespace std;
int n,m,root;
const int N=5e4+10;
const int M=1e5+10;
struct edge
{
int u,v,w;
}e[M];
bool cmp(edge a,edge b)
{
return a.w<b.w;
}
int f[N];
int findfather(int x)
{
if(x==f[x]) return x;
else return findfather(f[x]);
}
int kruscal()
{
sort(e,e+m,cmp);
int cnt=0,res=-1;
for(int i=1;i<=n;i++) f[i]=i;
for(int i=0;i<m;i++)
{
int u=e[i].u,v=e[i].v,w=e[i].w;
int f1=findfather(u),f2=findfather(v);
if(f1!=f2)
{
cnt++;
f[f1]=f2;
res=max(res,w);
}
if(cnt==n-1) break;
}
if(cnt<n-1) return -1;
return res;
}
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin>>n>>m>>root;
for(int i=0;i<m;i++)
{
cin>>e[i].u>>e[i].v>>e[i].w;
}
cout<<kruscal();
return 0;
}