比赛 20190521热身赛 评测结果 AAAAAAAAAA
题目名称 挖水井 最终得分 100
用户昵称 真香警告 运行时间 0.121 s
代码语言 C++ 内存使用 15.19 MiB
提交时间 2019-05-21 18:09:48
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 100000
using namespace std;

int n,ans,k,tot,fa[MAXN];

struct nond{
    int x,y,z;
}e[MAXN];

int cmp(nond a,nond b){
    return a.z<b.z;
}

int find(int x){
    if(fa[x]==x)    return fa[x];
    else return fa[x]=find(fa[x]);
}

int main(){
    freopen("water.in","r",stdin);
    freopen("water.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        int w;
        scanf("%d",&w);
        e[++tot].x=0;
        e[tot].y=i;
        e[tot].z=w;
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++){
            int p;
            scanf("%d",&p);
            e[++tot].x=i;
            e[tot].y=j;
            e[tot].z=p;
        }
    sort(e+1,e+1+tot,cmp);
    for(int i=0;i<=n;i++)    fa[i]=i;
    for(int i=1;i<=tot;i++){
        int dx=find(e[i].x);
        int dy=find(e[i].y);
        if(dx==dy)    continue;
        fa[dx]=dy;
        k++;
        ans+=e[i].z;
        if(k==n)    break;
    }
    cout<<ans<<endl;
    return 0;
}