文章
166
粉丝
68
获赞
855
访问
61.7k
#include <bits/stdc++.h>
using namespace std;
struct road{
int a,b,w;
road(int a,int b,int w):a(a),b(b),w(w){}
bool operator <(road y){
return w<y.w;
}
};
vector<int>f;
int findroot(int x){
return f[x]==x?x:f[x]=findroot(f[x]);
}
int main() {
int n;
while(cin>>n){
if(n==0)break;
f.resize(n+1);
for(int i=1;i<=n;i++)f[i]=i;
vector<road>a;
for(int i=0;i<n*(n-1)/2;i++){
int x,y,w;cin>>x>>y>>w;
a.push_back(road(x,y,w));
}
sort(a.begin(),a.end());
int ans=0;
for(auto x:a){
int fa=findroot(x.a);
int fb=findroot(x.b);
if(fa!=fb){
f[fa]=fb;
ans+=x.w;
}
}
cout<<ans<<endl;
}
}
find内实现了路径压缩
登录后发布评论
暂无评论,来抢沙发