图结构练习——最小生成树
来源:互联网 发布:《java开发实战经典》 编辑:程序博客网 时间:2024/06/06 17:27
Problem Description
有n个城市,其中有些城市之间可以修建公路,修建不同的公路费用是不同的。现在我们想知道,最少花多少钱修公路可以将所有的城市连在一起,使在任意一城市出发,可以到达其他任意的城市。
Input
输入包含多组数据,格式如下。
第一行包括两个整数n m,代表城市个数和可以修建的公路个数。(n <= 100, m <=10000)
剩下m行每行3个正整数a b c,代表城市a 和城市b之间可以修建一条公路,代价为c。
Output
每组输出占一行,仅输出最小花费。
Example Input
3 21 2 11 3 11 0
Example Output
20#include<stdio.h>#include<string.h>#define maxn 10005struct node{ int u; int v; int w;}tu[maxn];void getmap(int m){ int i; for(i=1;i<=m;i++) { scanf("%d%d%d",&tu[i].u,&tu[i].v,&tu[i].w); }}void qqsort(int left,int right){ int i,j,mid; struct node m; i=left; j=right; mid=tu[i].w; m=tu[i]; if(i>=j) return ; while(i<j) { while(i<j&&tu[j].w>=mid) j--; tu[i]=tu[j]; while(i<j&&tu[i].w<=mid) i++; tu[j]=tu[i]; } tu[i]=m; qqsort(left,i-1); qqsort(j+1,right);}int find (int father[],int e){ int f; f=e; while(father[f]>0) { f=father[f]; } return f;}void kruskal(int m){ int father[maxn]; int i,u,v,sum=0; for(i=1;i<=m;i++) { father[i]=0; } for(i=1;i<=m;i++) { u=find(father,tu[i].u); v=find(father,tu[i].v); if(u!=v) { father[u]=v; sum+=tu[i].w; } } printf("%d\n",sum);}int main(){ int n,m,u,v,w; while(scanf("%d%d",&n,&m)!=EOF) { getmap(m); qqsort(1,m); kruskal(m); } return 0;}
0 0
- SDUT 2144 图结构练习——最小生成树
- sdut2144图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树 kruskal
- 图结构练习——最小生成树-prim
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树 Prim算法
- 图结构练习——最小生成树 Kruskal算法
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- Spring Data JPA的Specifications和Querydsl
- Java 字节码操控框架ASM(三):修改 classes
- node-webkit项目最小化到托盘(右下角)
- 情感分析负面词汇收集
- Activity 设置style 改变为dialog后设置不显示title
- 图结构练习——最小生成树
- 从C到C++的升级之命名空间和数据类型
- Android NDK: From Elementary to Expert Episode 2
- 解决"Error detected while processing /root/.vimrc:"
- ZeroMQ(java)之I/O线程的实现与组件间的通信
- 为mysql数据库建立索引
- 网上订餐系统项目实战
- gdb 系列(2) (build&debug gdb)
- Oracle - AWR报告