zoj 1406 Jungle Roads

从A到F找到最短路即可,由于我不会用prim算法

只能用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[N].from = ch - 'A' + 1; scanf("%d",&m); for(i=1;i<m;i++) dis[N+i].from = dis[N].from; while(m--) { scanf(" %c",&ch); scanf("%d",&d); dis[N].to = ch - 'A' + 1; dis[N].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; }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值