http://acm.hdu.edu.cn/showproblem.php?pid=1102
prime模板题
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#define maxs 105
#define inf 1000000000
#define MME(i,j) memset(i,j,sizeof(i))
using namespace std;
int maps[maxs][maxs];
int dis[maxs];
bool vis[maxs];
void prim(int n)
{
for(int i=0;i<n;i++)
dis[i]=inf;
dis[0]=0;
int t;
for(int j=0;j<n;j++)
{
t=inf;
int pos;
for(int i=0;i<n;i++)
{
if(!vis[i] and t>dis[i])
{
t=dis[i];
pos=i;
}
}
vis[pos]=1;
for(int i=0;i<n;i++)
{
if(!vis[i] and dis[i] > maps[pos][i] and maps[pos][i]!=inf)
{
dis[i]=maps[pos][i];
}
}
}
int sum=0;
for(int i=0;i<n;i++)
{
sum+=dis[i];
// cout<<dis[i]<<endl;
}
cout<<sum<<endl;
}
int main()
{
int n,q;
while(~scanf("%d",&n))
{
MME(maps,0x3f);
MME(vis,0);
//cout<<maps[0][0]<<endl;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
scanf("%d",&maps[i][j]);
}
}
scanf("%d",&q);
int a,b;
while(q--)
{
scanf("%d %d",&a,&b);
maps[a-1][b-1]=0;
maps[b-1][a-1]=0;
}
prim(n);
}
return 0;
}