hhh…最后发现数组开小了【炸毛】…
我的一个小时!一个小时啊魂淡!
浪费在这道裸最小生成树上!
我去冷静一会再交下一道…
/*
ID:rainbow16
LANG:C++
TASK:agrinet
*/
#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
struct node { int x,y,d; };
node r[10025];
int fa[1000],m[105][105],n,ans,cou=0;
void init(void)
{
for(int i=1;i<1000;i++)
fa[i]=i;
}
int fin(int x)
{
if(fa[x]==x)
return x;
return fa[x]=fin(fa[x]);
}
void unio(int x,int y)
{
if(fin(x)!=fin(y))
fa[fin(x)]=fin(y);
}
bool cmp(node a,node b)
{
return a.d<b.d;
}
int main(void)
{
freopen("agrinet.in","r",stdin);
freopen("agrinet.out","w",stdout);
init();
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
scanf("%d",&m[i][j]);
if(i<j)
{
r[cou].x=i;
r[cou].y=j;
r[cou++].d=m[i][j];
}
}
sort(r,r+cou,cmp);
for(int i=0;i<cou;i++)
if(fin(r[i].x)!=fin(r[i].y))
{
unio(r[i].x,r[i].y);
ans+=r[i].d;
}
printf("%d\n",ans);
return 0;
}