题目链接:http://192.168.167.168/JudgeOnline/problem.php?id=141
#include <iostream>
using namespace std;
int G[1510][1510];
int n;
double D[1510];
bool M[1510];
int ans=0;
int prim()
{
int i,j,u;
double min;
D[1]=0;
for(i=1;i<=n;i++)
{
min=99999999;
for(j=1;j<=n;j++)
if(M[j]&&D[j]<min)
{
min=D[j];
u=j;
}
ans+=min;
M[u]=false;
for(j=1;j<=n;j++)
{
if(G[u][j]!=-1&&M[j]&&D[j]>G[u][j])
{
D[j]=G[u][j];
}
}
}
return ans;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
cin>>G[i][j];
}
for(int i=1;i<=n;i++)
{
D[i]=99999999;
M[i]=true;
}
cout<<prim();
}