sdut oj 2144 最小生成树
2013-06-29 16:44
204 查看
一开始用的是标记u,v的方法写的但是这样不能保证他们是否在同一颗树上,所以又用了并查集。。。。
有n个城市,其中有些城市之间可以修建公路,修建不同的公路费用是不同的。现在我们想知道,最少花多少钱修公路可以将所有的城市连在一起,使在任意一城市出发,可以到达其他任意的城市。
输入包含多组数据,格式如下。
第一行包括两个整数n m,代表城市个数和可以修建的公路个数。(n<=100)
剩下m行每行3个正整数a b c,代表城市a 和城市b之间可以修建一条公路,代价为c。
每组输出占一行,仅输出最小花费。
题目描述
有n个城市,其中有些城市之间可以修建公路,修建不同的公路费用是不同的。现在我们想知道,最少花多少钱修公路可以将所有的城市连在一起,使在任意一城市出发,可以到达其他任意的城市。
输入
输入包含多组数据,格式如下。第一行包括两个整数n m,代表城市个数和可以修建的公路个数。(n<=100)
剩下m行每行3个正整数a b c,代表城市a 和城市b之间可以修建一条公路,代价为c。
输出
每组输出占一行,仅输出最小花费。
示例输入
3 2 1 2 1 1 3 1 1 0
示例输出
2 0
#include <stdio.h> #include <string.h> #include <stdlib.h> int flag[100000]; int find (int x) { int x1 = x; while(x1 != flag[x1]) { x1 = flag[x1]; } return x1; } bool change(int x, int y) { int x1,y1; x1 = find (x); y1 = find (y); if(x1 != y1) { flag[x1] = y1; return true; } else return false; } struct node { int u,v,w; } edge[10005]; int cmp(const void *a,const void *b) { struct node *c=(struct node *)a; struct node *d=(struct node *)b; return c->w-d->w; } int main() { int n, m, i, count; while(~scanf("%d %d",&n, &m)) { for(i = 0; i <= m; i++) flag[i] = i; for(i = 0; i < m; i++) scanf("%d %d %d",&edge[i].u, &edge[i].v, &edge[i].w); qsort(edge, m, sizeof(struct node), cmp); count = 0; for(i = 0; i < m; i++) { if(change(edge[i].u,edge[i].v)) count += edge[i].w; } printf("%d\n",count); } return 0; }
相关文章推荐
- 数据结构与算法问题 sdut oj 2144 最小生成树
- sdut oj2144 图结构练习——最小生成树(普利姆算法)
- SDUT OJ 2144 最小生成树
- SDUT OJ 2144 图结构练习——最小生成树
- 2144 数据结构实验之图论九:最小生成树
- SDUT 2144 图结构练习——最小生成树
- SDUT 2144-最小生成树
- SDUT 2144 图结构练习——最小生成树
- 【2144】图结构练习——最小生成树 (prim算法模板) (sdut)
- 【2144】图结构练习——最小生成树 (prim算法模板) (sdut)
- SDUT 2144 图结构练习——最小生成树 Kruskal
- 2144-数据结构实验之图论九:最小生成树
- SDUT 2144 图结构练习-最小生成树
- 最小生成树(kruskal算法,模板)oj2144
- OJ2144图结构练习——最小生成树
- 2144-图结构练习——最小生成树
- sdut2144图结构练习——最小生成树
- SDUT 2144 图结构练习——最小生成树(kruskal模版)
- [SDUT](2144)图结构练习——最小生成树 ---最小生成树(图)
- sdutoj 2144最小生成树