直接最小生成树。。一开始看错题目了。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
int n,m;
typedef long long ll;
const int N=3e4+5;
ll ans;
struct node
{
int x,y,z;
}a[N];
bool cmp(node x,node y)
{
return x.z<y.z;
}
int f[N];
int find(int x)
{
if (f[x]==x)return x;
return f[x]=find(f[x]);
}
int main()
{
scanf("%d%d",&n,&m);
fo(i,1,m)
{
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
}
sort(a+1,a+1+m,cmp);
fo(i,1,n)f[i]=i;
int count=0;
fo(i,1,m)
{
int fx=find(a[i].x),fy=find(a[i].y);
if (fx!=fy)
{
f[fx]=fy;
count++;
if (count==n-1)
{
printf("%d\n",a[i].z);
break;
}
}
}
//printf("%lld\n",ans);
}