目前才剛學最小生成樹,發現這題好像不需要有特殊的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; }