zoj 1406 Jungle Roads
2011-08-17 16:08
246 查看
从A到F找到最短路即可,由于我不会用prim算法
只能用ku...算法,幸好这道题没有让输出路路径,
所以用ku...算法也行
我通常都是这样写的1.把边存起来2.快排3.并查集
呵呵,过了,还行吧
,对了输入注意用scanf
中的%d前加一个空格
只能用ku...算法,幸好这道题没有让输出路路径,
所以用ku...算法也行
我通常都是这样写的1.把边存起来2.快排3.并查集
呵呵,过了,还行吧
,对了输入注意用scanf
中的%d前加一个空格
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> typedef struct Tedge { int from,to; int dist; }edge; edge dis[100]; int N; int fa[30]; int find(int x) { if(x == fa[x]) return x; fa[x] = find(fa[x]); return(fa[x]); } int cmp(const void *a,const void *b) { return (*(edge *)a).dist - (*(edge *)b).dist; } int main() { int n,sub,m,d,i,count,sum; char ch; while(scanf("%d",&n)==1,n) { N = 0; sub = n; sub -= 1; while(sub--) { scanf(" %c",&ch); dis .from = ch - 'A' + 1; scanf("%d",&m); for(i=1;i<m;i++) dis[N+i].from = dis .from; while(m--) { scanf(" %c",&ch); scanf("%d",&d); dis .to = ch - 'A' + 1; dis .dist = d; N++; } } //输入完成 qsort(dis,N,sizeof(edge),cmp); for(i=1;i<=n;i++) fa[i] = i; count =0; sum = 0; for(i=0;i<N;i++) { if(find(dis[i].from) != find(dis[i].to)) { fa[find(dis[i].from)] = find(dis[i].to); sum += dis[i].dist; count++; if(count == (n-1))break; } } printf("%d\n",sum); } return 0; }
相关文章推荐
- zoj 1406 - Jungle Roads
- Jungle roads (zoj 1406 hdoj 1301)
- zoj 1406 Jungle Roads(最小生成树)
- poj 1251; zoj 1406 Jungle Roads[ MST ]
- zoj - 1406 - Jungle Roads
- (最小生成树)ZOJ 1406 Jungle Roads
- ZOJ 1406.Jungle Roads
- zoj - 1406 - Jungle Roads
- ZOJ 1406 Jungle Roads 【kruskal】
- zoj 1406 Jungle Roads
- zoj 1406 Jungle Roads(最小生成树))
- zoj 1406 jungle roads
- zoj 1406 Jungle Roads(Prim || Kruskal)
- zoj 1406 jungle roads
- zoj_1406 Jungle Roads
- zoj 1406 Jungle Roads 最小生成树
- zoj 1406 poj 1251 Jungle Roads
- ZOJ 1406 Jungle Roads (kruskal)
- ZOJ 1406 Jungle Roads (最小生成树)
- zoj 1406 Jungle Roads