比赛 20190521热身赛 评测结果 AAAAAAAAAA
题目名称 挖水井 最终得分 100
用户昵称 十二12 运行时间 0.133 s
代码语言 C++ 内存使用 16.71 MiB
提交时间 2019-05-21 19:20:46
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct edge{
	int t,v,w;
}e[100005];
int t;
int fa[500005],x,y,z,cnt,ans;
bool cmp(edge a,edge b) {
	return a.w<b.w;
}
int find(int x) {
	if(fa[x]==x)return x;
	else return fa[x]=find(fa[x]);

}
int main()
{  freopen("water.in","r",stdin);
    freopen("water.out","w",stdout);
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {   int x;
    	cin>>x;
    	e[++t].t=0;
    	e[t].v=i;
    	e[t].w=x;
	}
	for(int i=1;i<=n;i++)
	for(int j=1;j<=n;j++)
	{int x;
	cin>>x;
	if(i>j)
	{
		e[++t].t=i;
		e[t].v=j;
		e[t].w=x;
	}
		
	}
	sort(e+1,e+t+1,cmp);
	for(int i=1;i<=n;i++)
	{
		fa[i]=i;
	}
	for(int i=1;i<=t;i++)
	{
		int u=find(e[i].t),v=find(e[i].v);
		if(u==v)
		continue;
		else{
			ans+=e[i].w;
			fa[v]=u;
			if(++cnt==n)
			break;
		}
	}
	cout<<ans;
	return 0;
}