比赛 20190521热身赛 评测结果 AAAAAAAAAA
题目名称 挖水井 最终得分 100
用户昵称 CoolBoy小逴 运行时间 0.119 s
代码语言 C++ 内存使用 14.80 MiB
提交时间 2019-05-21 18:11:01
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm> 
using namespace std;
int n,val,head[305],cnt,ans,fa[305];
struct Edge{
	int u,v,w;
}e[100010];
bool cmp(Edge x,Edge y){
	return x.w<y.w;
}
inline int read(){
	int x=0,f=1;char ch=getchar();
	while(ch>'9'||ch<'0'){if(ch='-')f=-1;ch=getchar();}
	while(ch<='9'&&ch>='0'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
void add(int u,int v,int w){
	e[++cnt].v=v;
	e[cnt].u=u;
	e[cnt].w=w;
	return ;
}
int getf(int x){
	if(x==fa[x])return x;
	else return fa[x]=getf(fa[x]);	
}
int main(){
	freopen("water.in","r",stdin);
	freopen("water.out","w",stdout);
	n=read();
	for(int i=1;i<=n;i++){
		val=read();
		add(0,i,val);
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++){
			val=read();
			add(i,j,val);
		}
	sort(e+1,e+cnt+1,cmp);
	for(int i=1;i<=n;i++)fa[i]=i;
	for(int i=1;i<=cnt;i++){
		int x=getf(e[i].u);
		int y=getf(e[i].v);
		if(x==y)continue;
		fa[x]=y;
		ans+=e[i].w;
	}
	printf("%d",ans);
}
/*4
5
4
4
3
0 2 2 2
2 0 3 3
2 3 0 4
2 3 4 0
*/