您的位置:首页 > 其它

ZOJ 1406 Jungle Roads 【kruskal】

2011-08-10 10:33 405 查看
1406

//2621190 	2011-08-10 10:31:25 	Accepted 	1406 	C++ 	0 	184 	ylwh!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <algorithm>
#define N 27
using namespace std;
struct edge
{
int x, y;
int cost;
}e[N*N/2];
int root
;
bool cmp(struct edge a, struct edge b)
{
return a.cost < b.cost;
}
int find_root(int x)
{
int temp;
temp = x;
while(temp != root[temp])
temp = root[temp];
root[x] = temp;
return temp;
}
int main()
{
int n, k, temp, flag, d
, cnt;
int i, j, ans;
char ch;
while(scanf("%d", &n), n)
{
cnt = -1;
ans = 0;
for(i=0; i<n; i++)
root[i] = i;
for(i=0; i<n-1; i++)
{
scanf(" %c%d", &ch, &k);
temp = ch - 'A';
while(k--)
{
scanf(" %c%d", &ch, &flag);
e[++cnt].x = temp;
e[cnt].y = ch - 'A';
e[cnt].cost = flag;
}
}
sort(e, e+cnt+1, cmp);
int a, b;
for(i=0; i<=cnt; i++)
{
a = find_root(e[i].x);
b = find_root(e[i].y);
if(a != b)
{
root[b] = a;
ans += e[i].cost;
}
}
printf("%d\n", ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struct c