比赛 |
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;
}