求救,可壶关
查看原帖
求救,可壶关
1379705
white_white楼主2025/7/22 21:19
#include<bits/stdc++.h>
using namespace std;
int n,m,a,s,dis[100100],sum=1,ans;
int find(int x){
    if(x!=dis[x]) dis[x]=find(dis[x]);
        return dis[x];
}
struct edge{
    int u,v,w;
}e[100100];
bool cmp(edge x,edge y){
    return x.w<y.w;
}
signed main(){
    cin>>m;
    for(int i=1;i<=m;i++){
        for(int j=1;j<=m;j++){
            cin>>a;
            if(j>i){
                ++s;
                e[s].u=i;
                e[s].v=j;
                e[s].w=a;
            }
        }
    }
    sort(e+1,e+m+1,cmp);
    for(int i=1;i<=m;i++)dis[i]=i;
    for(int i=1;i<=m;i++){
        if(sum==n-1)
            break;
        int u=find(e[i].u);
        int v=find(e[i].v);
        int w=e[i].w;
        if(u==v)
        continue;
        dis[v]=u;
        sum++;
        ans+=e[i].w;
    }
    cout<<ans;
return 0;
}
2025/7/22 21:19
加载中...