比赛 |
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
*/