http://acm.nyist.net/JudgeOnline/problem.php?pid=434
比简单的一道最小生成树模板题,关键点在于建图时,数据读写格式的处理,由于没处理好,re了无数次
#include<stdio.h>
#include<string.h>
#define MAX 1<<28
int map[40][40];
int n;
int prime()
{
bool flag[40];
int dis[40],i,sum=0,j;
for(i=1;i<=n;i++)
{
flag[i]=0;
dis[i]=map[1][i];
}
flag[1]=1;
for(i=1;i<n;i++)
{
int k=1,min;
min=MAX;
for(j=1;j<=n;j++)
{
if(!flag[j]&&dis[j]<min)
{
min=dis[j];
k=j;
}
}
sum+=dis[k];
flag[k]=1;
for(j=1;j<=n;j++)
{
if(!flag[j]&&dis[j]>map[k][j])
dis[j]=map[k][j];
}
}
return sum;
}
int main()
{
int i,m,c;
char a[2],b[2];
while(~scanf("%d",&n),n)
{
memset(map,9999,sizeof(map));
for(i=1;i<n;i++)
{
scanf("%s%d",a,&m);
//getchar();
while(m--)
{
scanf("%s%d",b,&c);
//getchar();
if(map[a[0]-64][b[0]-64])
map[a[0]-64][b[0]-64]=map[b[0]-64][a[0]-64]=map[a[0]-64][b[0]-64]>c?c:map[a[0]-64][b[0]-64];
}
}
printf("%d\n",prime());
}
return 0;
}