库鲁斯卡尔算法
#include <iostream>
using namespace std;
int a[1010];
int dp[1000][1000];
int group[1000];
struct node {
int l,r,v;
}c[1010],d[1010];
int cmp(node x,node y) {
return x.v<y.v;
}
bool check(int i,int j,int n){ //检查,并将不是一个group的归到同一个group中
if(group[j]==group[i]) return false;
else{
int temp=group[i];
for(int k=1;k<=n;k++){
if(group[k]==temp){
group[k]=group[j];
}
}
return true;
}
}
int main() {
int m,n;
cin>>m>>n;
for(int i=1;i<=n;i++)
cin>>c[i].l>>c[i].r>>c[i].v;
for(int i=1;i<=n;i++)
group[i]=i;
sort(c+1,c+1+n,cmp);
/* a[c[1].l]++;
a[c[1].r]++;
int sum=c[1].v;*/
int sum=0;
//c[1].r=0;
int num=0;
int number=0;
int t=c[1].l;
for(int i=1;i<=n;i++)
cout<<c[i].l<< " "<<c[i].r<< " "<<c[i].v<<endl;
for(int i=1;i<=n;i++) {
if(check(c[i].l,c[i].r,n))
{
sum+=c[i].v;
num++;
}
}
if(num!=m-1)
cout<<"false"<<num<<endl; //用来检测是否包含所有的点,不是的话输出false
cout<<sum<<endl;
return 0;
}