这个查了一下解题思路,然后再去做的,说是直接用并查集和kruskal算法,所以我就先把模板炒上去了,可是有时runtime error,差点没把我逼疯,数组溢出也可能出现这个可能,我试着把road数组加大,然后AC了,悲伤辣么大,快乐辣么小QAQ
http://www.cnblogs.com/”http:/www.cnblogs.com/dongsheng/archive/2012/08/24/2654116.html
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdlib>
using namespace std;
const int inf(1<<20);
int p[30];
struct node
{
int x,y,cost;
}road[30];
int cmp(node a,node b)
{
return a.cost<b.cost;
}
int find(int a)
{
return p[a]==a?a:p[a]=find(p[a]);
}
int main()
{
int n;
while(cin>>n,n)
{
int i,j;
for(i=0;i<27;i++)
p[i]=i;
int k=0;
for(i=0;i<n-1;i++)
{
char str[3];
int m;
cin>>str>>m;
for(j=0;j<m;j++,k++)
{
char str2[3];
int t;
cin>>str2>>t;
road[k].x=(int)(str[0]-'A');
road[k].y=(int)(str2[0]-'A');
road[k].cost=t;
}
}
int ans=0;
sort(road,road+k,cmp);
for(int i=0;i<k;i++)
{
int fx=find(road[i].x);
int fy=find(road[i].y);
if(fx!=fy)
{
ans+=road[i].cost;
p[fx]=fy;
}
}
cout<<ans<<endl;
}
return 0;
}