1 条题解

  • 1
    @ 2025-11-29 15:46:34
    #include<bits/stdc++.h>
    using namespace std;
    struct edge{
        int u,v,w;
    };
    vector<edge> G;
    int fa[1010],ans,cnt;
    int find_root(int x){
        if(fa[x]==x){
            return x;
        }
        return fa[x]=find_root(fa[x]);
    }
    bool cmp(edge a,edge b){
        return a.w<b.w;
    }
    int main(){
        ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);
        int a,b;
        cin>>a>>b;
        for(int i=0;i<=b;i++){
            fa[i]=i;
        }
        for(int i=1;i<=b;i++){
            G.push_back({0,i,a});
        }
        for(int i=1;i<=b;i++){
            for(int j=1;j<=b;j++){
                int x;
                cin>>x;
                if(i<j&&x!=0){
                    G.push_back({i,j,x});
                }
            }
        }
        sort(G.begin(),G.end(),cmp);
        for(edge it:G){
            int u=find_root(it.u),v=find_root(it.v);
            if(u==v){
                continue;
            }
            fa[u]=v;
            ans+=it.w;
            cnt++;
            if(cnt==b){
                break;
            }
        }
        cout<<ans;
        return 0;
    }
    
    
    

    信息

    ID
    5252
    时间
    1000ms
    内存
    128MiB
    难度
    5
    标签
    递交数
    11
    已通过
    5
    上传者