目前才剛學最小生成樹,發現這題好像不需要有特殊的merge,以下是答案
#include <bits/stdc++.h>
using namespace std;
struct q{
int a,b,c;
};
int per[100000];
int find(int a){
if(per[a]==a){
return a;
}
return find(per[a]);
}
bool cmp(q a,q b){
return a.c<b.c;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
per[i]=i;
}
vector<q> road(m);
for(int i=0;i<m;i++){
cin>>road[i].a>>road[i].b>>road[i].c;
}
sort(road.begin(),road.end(),cmp);
int ans=0;
int a,b,c;
for(int i=0;i<m;i++){
a=road[i].a;b=road[i].b;c=road[i].c;
a=find(a);
b=find(b);
if(a!=b){
per[a]=b;
ans+=c;
}
}
cout<<ans;
}