链接:http://poj.org/problem?id=1251
我是来套模板的%>_<%
#include<iostream>
#define MAXN 400
#define MAXROAD 30
#define MAXCOST 105
using namespace std;
int roads[MAXN][MAXN];
int lowcost[MAXROAD],closest[MAXROAD];
int prim(int v,int n)
{
int i,j,mindis,minone;
int ans=0;
for(i=0;i<n;i++)
{
lowcost[i]=roads[v][i];
closest[i]=v;
}
lowcost[v]=0;
for(i=0;i<n-1;i++)
{
mindis=MAXCOST;
for(j=0;j<n;j++)
if(lowcost[j]&&mindis>lowcost[j])
{
mindis=lowcost[j];
minone=j;
}
ans+=lowcost[minone];
lowcost[minone]=0;
for(j=0;j<n;j++)
if(roads[j][minone]<lowcost[j])
{
lowcost[j]=roads[j][minone];
closest[j]=minone;
}
}
return ans;
}
int main()
{
int n,k,cost;
int i,j;
char a,b;
while(cin>>n&&n)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
roads[i][j]=MAXCOST;
for(i=0;i<n-1;i++)
{
cin>>a>>k;
for(j=0;j<k;j++)
{
cin>>b>>cost;
roads[a-65][b-65]=cost;
roads[b-65][a-65]=cost;
}
}
cout<<prim(0,n)<<endl;
}
return 0;
}