博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1232 畅通工程(并查集)
阅读量:7060 次
发布时间:2019-06-28

本文共 841 字,大约阅读时间需要 2 分钟。

最简单的并查集题了吧!

某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?  

本题只需将联通的村庄联系在一起而已!

#include<stdio.h>

int pre[1010];
int find(int k)
{
if(k==pre[k])
return k;
pre[k]=find(pre[k]);
return pre[k];
}
int main()
{
int n,m,i,a,b,f1,f2,ans;
while(scanf("%d",&n),n)
{
scanf("%d",&m);
for(i=1;i<=n;i++)
pre[i]=i;
for(i=0;i<m;i++)
{
scanf("%d %d",&a,&b);
f1=find(a);
f2=find(b);
if(f1!=f2)
pre[f1]=f2;
}
ans=0;
for(i=1;i<=n;i++)
if(i==pre[i])
ans++;
printf("%d\n",ans-1);
}
return 0;
}

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232

并查集:

 

定义

并查集是一种树型的 ,用于处理一些不相交 (Disjoint Sets)的合并及查询问题。常常在使用中以 来表示。
集就是让每个元素构成一个单元素的 ,也就是按一定顺序将属于同一组的 所在的集合合并。

 

 

 

初始化

把每个点所在 初始化为其自身。
通常来说,这个 在每次使用该 时只需要 一次,无论何种实现方式, 均为O(N)。

查找

查找元素所在的 ,即根节点。

合并

将两个元素所在的 合并为一个集合。
通常来说,合并之前,应先判断两个元素是否属于同一 ,这可用上面的“查找”操作实现。

 

 

 

转载地址:http://cdyll.baihongyu.com/

你可能感兴趣的文章
javascript中的数组
查看>>
学习JavaScript数据结构与算法(二):链表
查看>>
RailsTutorial-笔记1-HelloWorld
查看>>
Python数据结构——树的实现
查看>>
iOS支付宝2.3.3SDK集成开发(Swift1.2)
查看>>
【memcache缓存专题(1)】memcache的介绍与应用场景
查看>>
JavaScript中Prototype、__proto__
查看>>
PaddlePaddle 中文名「飞桨」重磅公布,百度发布一亿元免费算力计划 ...
查看>>
kubernetes--应用程序健康检查
查看>>
学习大数据分析需要什么基础?
查看>>
iPhone XS选用英特尔基带的原因,苹果和高通的说法相互矛盾 ...
查看>>
jQuery事件对象---常见属性
查看>>
物联网数据可视化很难???你只需要它~~~
查看>>
三七女生节,看程序媛们选好口红色号,踩上高跟鞋,特别美丽,特别凶狠,特别温柔~ ...
查看>>
OTSReader自己定义切分主键
查看>>
免费直达国际顶会,与业界大佬面对面,AI 研习社 2019 年「顶会赞助计划」即将开启 ...
查看>>
关于人工智能,你所需了解的基本知识
查看>>
2019,聊聊Web技术的发展
查看>>
centos7使用kubeadm配置高可用k8s集群的另一种方式
查看>>
深入探索 Kdump
查看>>