比赛 |
20190521热身赛 |
评测结果 |
AAAAAAAAAA |
题目名称 |
挖水井 |
最终得分 |
100 |
用户昵称 |
gsj.cpp |
运行时间 |
0.066 s |
代码语言 |
C++ |
内存使用 |
17.12 MiB |
提交时间 |
2019-05-21 19:20:53 |
显示代码纯文本
#include <algorithm>
#include <bitset>
#include <cctype>
#include <cerrno>
#include <clocale>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <limits>
#include <list>
#include <map>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <utility>
#include <vector>
#include <cwchar>
#include <cwctype>
#define LL long long
using namespace std;
inline LL read()
{
char ch=getchar();LL x=0,f=1;
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
LL n,w[305],a[305][305],ans=0,sum;
struct Edge
{
LL from,to,w;
int num;
}e[90005];
LL cnt,fa[305];
bool cmp(Edge a,Edge b)
{
return a.w<b.w;
}
LL getfa(LL x)
{
if(fa[x]==x)return x;
else return fa[x]=getfa(fa[x]);
}
void u(LL x,LL y)
{
x=getfa(fa[x]),y=getfa(y);
fa[x]=y;
}
void kru()
{
sort(e+1,e+cnt+1,cmp);
for(int i=1;i<=n;i++)fa[i]=i;
for(int i=1;i<=cnt;i++)
{
if(getfa(e[i].from)!=getfa(e[i].to))
{
ans+=e[i].w;
u(e[i].from,e[i].to);
sum++;
if(sum==n)return;
}
}
return;
}
int main()
{
freopen("water.in","r",stdin);
freopen("water.out","w",stdout);
n=read();
for(int i=1;i<=n;i++)
{
e[++cnt].from=n+1;
e[cnt].to=i;
e[cnt].w=read();
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
a[i][j]=read();
if(i>j)
{
e[++cnt].from=i;
e[cnt].to=j;
e[cnt].w=a[i][j];
}
}
kru();
sort(w+1,w+n+1);
ans+=w[1];
cout<<ans;
return 0;
}