文章

166

粉丝

68

获赞

855

访问

61.7k

头像
还是畅通工程 题解:并查集优化实现的最小生成树问题
P1341 浙江大学机试题
发布于2025年3月14日 13:29
阅读数 156

#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内实现了路径压缩

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发