题目: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算法并查集实现)相关推荐

  1. HDU1233 还是畅通工程【Kruskal算法+并查集】

    还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  2. HDU1863 畅通工程【Kruskal算法+并查集】

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  3. HDU 1863畅通工程(最小生成树)(prim算法)

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  4. 最小生成树kruskal算法并查集版 C语言实现

    今天数据结构课讲了最小生成树的Kruskal算法和Prim算法,不过都只是概念,可能是怕他们听不懂吧,反正算法实现一概不讲...囧 下午抱着<算法导论>跑去图书馆看Kruskal算法,发现 ...

  5. 还是畅通工程(克鲁斯卡尔算法+并查集)

    还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  6. 最小生成树KrusKal算法(并查集)

    洛谷p1111链接 克鲁斯卡尔算法的思路就是由森林变成树的过程,其中最主要的就是贪心和并查集的应用. 我们知道链接n个点需要n-1条边,这就满足的最后生成的是一颗树,而不是一个环.在这n-1条边的选择 ...

  7. 最小生成树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 */// 本例解决最小生成树问题 // 并查集来加快效率 // ...

  8. UVA10034 Freckles【Kruskal算法+并查集】

    In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back to fo ...

  9. HDU1875 畅通工程再续【Kruskal算法+并查集】

    畅通工程再续 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

最新文章

  1. 汉诺塔问题---小昝
  2. 利用C语言实现顺序表
  3. b站python教程哪个好_推荐B站上的Python学习资源
  4. mysql 中函数如何转存_MySQL函数转储存(当前月数据同步)
  5. Hadoop 同步集群时间ntp
  6. Mac安装brew及报错处理办法
  7. 机器视觉技术及应用_工业机器人视觉技术的应用前景
  8. WPF/Silverlight Undo/Redo框架
  9. CentOS7安装VirtualBox后系统起不来了:版本和vbox兼容很重要吧,不然VirtualBox起不来。
  10. Net::SSH::Perl 连接远程主机慢的原因
  11. ubuntu下使用code::blocks编译运行一个简单的gtk+2.0项目
  12. No package 'libxml-2.0' found
  13. 2022年煤矿安全监测监控特种作业证考试题库模拟考试平台操作
  14. 逆向破解必备基础smail基础语法
  15. 信息安全领域四大顶会
  16. 人工智能轨道交通行业周刊-第14期(2022.9.12-9.18)
  17. SSD_装了ssd后,右下角的那个安全删除硬件的标志要怎么去掉?
  18. SEM扫描电镜知识点扫盲,请收好
  19. 下班前几分钟,我彻底弄懂了并查集
  20. 搜苹果ipad版_快速实现苹果企业签名,几分钟就可以?

热门文章

  1. 主类main方法里面可以有不带public的子类 但是不能有接口
  2. Spring MVC url提交参数和获取参数
  3. Hibernate--Criteria Query and DetachedCriteria
  4. 在MVC3中使用code first生成数据局库并操作数据库
  5. Web前端Javascript笔记(5)事件
  6. 关于Java的静态初始化块
  7. 第一款Layer 2钱包Rollups Wallet已上线苹果AppStore
  8. The Generalist和Visualize Value在去中心化内容发布平台Mirror上发起众筹
  9. 全国政协常委胡晓炼:要重视数字货币与数字鸿沟问题
  10. 赛锐信息:SAP 程序优化