HDOJ 1863畅通工程(最小生成树kruskal算法并查集实现)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1863
最小生成树kruskal算法:http://www.zhuoda.org/irini/78592.html
一开始看到题目的时候就知道是求最小生成树的题目,而且可以用并查集了构建树,但是不知道怎么将并查集和求最小生成树的算法结合起来,后来看到了
最小生成树Kruskal算法是用贪心求最小生成树的,每次都都取权值最小的边去构建树,如果两点的祖先结点相同,及直接连通或者间接连通的时候则不再建边
否则创建边使连点直接或间接连通。
实现算法如下:
#include<stdio.h>
#include<algorithm>
#include<string.h>
#define MAXN 105
int C[MAXN],W[MAXN][MAXN];
struct node
{int x,y;int w;
}arr[105];
int cmp(const void *a,const void *b)
{node *pa = (node*)a;node *pb = (node*)b;return pa->w > pb ? 1 : pa->w < pb->w ? -1 : 0;
}
void init(int n)//初始化结点的祖先结点为它本身
{int i;for(i = 1; i<= n; i++)C[i] = i;
}int find(int x)//找到树的根节点
{int r ;r = C[x];while(r != C[r])r = C[r];return r;
}
int main()
{int N,M,i,n,Min;int a,b;while(scanf("%d%d",&N,&M) != EOF,N){//输入所有的结点及边的权值for(i = 0; i < N; i++)scanf("%d%d%d",&arr[i].x,&arr[i].y,&arr[i].w);//按权值从小到大进行排序qsort(arr,N,sizeof(node),cmp);// for(i = 0;i <N; i++)// printf("%d %d %d\n",arr[i].x,arr[i].y,arr[i].w);init(M);Min = 0;for(i = 0; i < N; i++)//采用并查集实现最小生成树kruskal{//求结点arr[i].x的祖先结点和arr[i].y的祖先结点a = find(arr[i].x);b = find(arr[i].y);if( a != b){//当不连通的时候将两棵树的祖先结点连通,权值的最小值加上arr[i].x到arr[i].y的权值M --;C[a] = b;Min += arr[i].w;}}if(M > 1)//所有结点不能组成一颗树的时候输出?否则输出最小生成树的权值和printf("?\n");elseprintf("%d\n",Min);}return 0;
}
转载于:https://www.cnblogs.com/LUO257316/archive/2012/08/09/3220847.html
HDOJ 1863畅通工程(最小生成树kruskal算法并查集实现)相关推荐
- HDU1233 还是畅通工程【Kruskal算法+并查集】
还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- HDU1863 畅通工程【Kruskal算法+并查集】
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU 1863畅通工程(最小生成树)(prim算法)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 最小生成树kruskal算法并查集版 C语言实现
今天数据结构课讲了最小生成树的Kruskal算法和Prim算法,不过都只是概念,可能是怕他们听不懂吧,反正算法实现一概不讲...囧 下午抱着<算法导论>跑去图书馆看Kruskal算法,发现 ...
- 还是畅通工程(克鲁斯卡尔算法+并查集)
还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- 最小生成树KrusKal算法(并查集)
洛谷p1111链接 克鲁斯卡尔算法的思路就是由森林变成树的过程,其中最主要的就是贪心和并查集的应用. 我们知道链接n个点需要n-1条边,这就满足的最后生成的是一颗树,而不是一个环.在这n-1条边的选择 ...
- 最小生成树Kruskal算法+并查集检查连通
/* 10 6 1 2 6 1 3 1 1 4 5 2 3 5 2 5 3 3 4 5 3 5 6 3 6 4 4 6 2 5 6 6 */// 本例解决最小生成树问题 // 并查集来加快效率 // ...
- UVA10034 Freckles【Kruskal算法+并查集】
In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back to fo ...
- HDU1875 畅通工程再续【Kruskal算法+并查集】
畅通工程再续 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
最新文章
- 汉诺塔问题---小昝
- 利用C语言实现顺序表
- b站python教程哪个好_推荐B站上的Python学习资源
- mysql 中函数如何转存_MySQL函数转储存(当前月数据同步)
- Hadoop 同步集群时间ntp
- Mac安装brew及报错处理办法
- 机器视觉技术及应用_工业机器人视觉技术的应用前景
- WPF/Silverlight Undo/Redo框架
- CentOS7安装VirtualBox后系统起不来了:版本和vbox兼容很重要吧,不然VirtualBox起不来。
- Net::SSH::Perl 连接远程主机慢的原因
- ubuntu下使用code::blocks编译运行一个简单的gtk+2.0项目
- No package 'libxml-2.0' found
- 2022年煤矿安全监测监控特种作业证考试题库模拟考试平台操作
- 逆向破解必备基础smail基础语法
- 信息安全领域四大顶会
- 人工智能轨道交通行业周刊-第14期(2022.9.12-9.18)
- SSD_装了ssd后,右下角的那个安全删除硬件的标志要怎么去掉?
- SEM扫描电镜知识点扫盲,请收好
- 下班前几分钟,我彻底弄懂了并查集
- 搜苹果ipad版_快速实现苹果企业签名,几分钟就可以?
热门文章
- 主类main方法里面可以有不带public的子类 但是不能有接口
- Spring MVC url提交参数和获取参数
- Hibernate--Criteria Query and DetachedCriteria
- 在MVC3中使用code first生成数据局库并操作数据库
- Web前端Javascript笔记(5)事件
- 关于Java的静态初始化块
- 第一款Layer 2钱包Rollups Wallet已上线苹果AppStore
- The Generalist和Visualize Value在去中心化内容发布平台Mirror上发起众筹
- 全国政协常委胡晓炼:要重视数字货币与数字鸿沟问题
- 赛锐信息:SAP 程序优化