hdu1233 - 还是畅通工程 (求最小生成树)(Kruskal)
来源:互联网 发布:js获取昨天的日期 编辑:程序博客网 时间:2024/04/30 07:28
还是畅通工程
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 25979 Accepted Submission(s): 11582
Problem Description
某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。
Input
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。
当N为0时,输入结束,该用例不被处理。
Output
对每个测试用例,在1行里输出最小的公路总长度。
Sample Input
31 2 11 3 22 3 441 2 11 3 41 4 12 3 32 4 23 4 50
Sample Output
35Huge input, scanf is recommended.HintHint
Source
浙大计算机研究生复试上机考试-2006年
没啥好说的,巩固复习了
/************************************* acm: hdu-1233**title: 还是畅通工程**time : 2014.8.14************************************///考察 最小生成树//本题运用 Kruskal算法#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXEDGE 4950#define MAXVEX 100typedef struct Edge{ int begin; int end; int weight;} Edge;void Swapn(Edge *edges, int i, int j){ int temp; temp = edges[i].begin; edges[i].begin = edges[j].begin; edges[j].begin = temp; temp = edges[i].end; edges[i].end = edges[j].end; edges[j].end = temp; temp = edges[i].weight; edges[i].weight = edges[j].weight; edges[j].weight = temp;}void sort(Edge edges[], int length){ int i; int j; int k; for (i = 0; i < length - 1; i++) { k = i; for (j = i + 1; j < length; j++) { if (edges[k].weight > edges[j].weight) { k = j; } } if (k != i) { Swapn(edges, k, i); } }}int Find(int parent[], int f){ int k = f; int temp; while (parent[f] >= 0) { f = parent[f]; } while (k != f) { temp = parent[k]; parent[k] = f; k = temp; } return f;}int MiniSpanTree_Kruskal(Edge edges[], int lenth){ int n; int m; int i; int parent[MAXVEX]; int temp; int num = 0; memset(parent, -1, sizeof(parent)); for (i = 0; i < lenth; i++) { n = Find(parent, edges[i].begin); m = Find(parent, edges[i].end); if (n != m) { temp = parent[n] + parent[m]; if (parent[n] > parent[m]) { parent[n] = m; parent[m] = temp; } else { parent[m] = n; parent[n] = temp; } num += edges[i].weight; } } return num;}int main(){ int n; int i; int length; Edge edges[MAXEDGE]; while (scanf("%d", &n), n) { length = 0; n = n * (n - 1) / 2; for (i = 0; i < n; i++) { scanf("%d%d%d", &edges[i].begin, &edges[i].end, &edges[i].weight); length++; } sort(edges, length); n = MiniSpanTree_Kruskal(edges, length); printf("%d\n", n); } return 0;}
0 0
- hdu1233 - 还是畅通工程 (求最小生成树)(Kruskal)
- hdu1233 还是畅通工程 (kruskal求最小生成树)
- HDU1233还是畅通工程(最小生成树 Kruskal算法)
- hdu1233还是畅通工程 最小生成树(prim或kruskal)
- hdu1233 还是畅通工程 最小生成树(kruskal算法)
- HDU1233--还是畅通工程--最小生成树--kruskal
- Hdu1233-还是畅通工程-【最小生成树】【Kruskal算法】
- Hdu1233 - 还是畅通工程 - 最小生成树
- 最小生成树-hdu1233-还是畅通工程
- hdu1233还是畅通工程【最小生成树】
- HDU1233 还是畅通工程 【最小生成树】
- 最小生成树: HDU1233还是畅通工程
- hdu1233 还是畅通工程【最小生成树】
- hdu1233 还是畅通工程 ( 最小生成树)
- hdu1233 还是畅通工程(最小生成树 prim 算法)
- hdu1233 还是畅通工程(最小生成树)
- 还是畅通工程 HDU1233(最小生成树)
- hdu1233---还是畅通工程 最小生成树(水)
- magento或者php程序屏蔽中文浏览器访问
- c++中string的用法
- EPIGRAMS IN PROGRAMMING
- hdu-2544最短路 dijkstra算法入门练习
- Hbase shell 命令
- hdu1233 - 还是畅通工程 (求最小生成树)(Kruskal)
- 黑马视频学习笔记-字符串
- Linux配置邮件服务器sendmail +dovecot
- Python 正则表达式查找不是某个字符的字符串
- 导出新项目后需要修改的几个配置文件及其他配置文件用处
- break 与 continue 简单思考
- 页面传递event给后台jquery处理
- 使用 Python 进行稳定可靠的文件操作
- Eclipse 环境配置