首先介绍一般合并,合并的内容,与其名称相同,与同一两个函数的功能相同,是一个集合。如果有5个集,这5集为{1} {2} {3} {4} {5},每个集合中只有一个元素。如果说将1和2合并到一个集合中,则会有{1,2}。检查的功能是检查这两个元素是否在同一集合中,例如{1,2,3} {4} {5} {5},检查1,2,然后在同一组中,4和5不在因此,我知道近似思维,如何使用代码出现?每个人都可能学会了树结构
一开始,每个元素都是一个单独的收藏。如果目前有操作,则将1合并为同一集合的2,1,2。
for(int i = 1; i <= n; i ++)a [i] = i;让每个元素是一个单独的集合,也就是说,上图中的5个球函数是找到树根节点点的根点
我们可以理解并检查一个问题
H -Changtong项目HDU -1232调查一个省份城市和城镇的交通状况,并获得了现有的城市和城镇的道路统计桌,该表列出了每条道路直接连接的城镇。“是要使该省的两个城镇能够实现交通运输(但不一定直接与道路联系,只要可以间接地通过道路到达道路)。您至少需要建造多少道路?
输入测试输入包含几个测试案例。每个测试案例的第一行被赋予两个正整数,即城市和城镇的数量N(<1000)和道路数量;随后的M线对应于道路直接连接的两个直接连接的两个城镇的数量,该城镇的数量从1到N. N. N. N. NOTE:两个城市之间可以有多条道路,也就是说,3 3 1 2 1 2 1 22 1当n为0时,此输入也是合法的,输入已经结束,并且案件未处理。
输出至少在每个测试案例中需要构建的道路数量。
样品输入4 2 1 3 4 3 3 1 2 3 3 3 3 3 3 3 5 999 0 0 0
样品输出1 0 2 998
从这个话题中,我们可以知道,n城镇,如果城镇1和城镇2思考,2和3连接,然后连接1和3。合并所有城镇后,整个城镇都经过了多少套套件,也就是说许多圆圈是,您需要认为以下代码中的查找函数需要被视为路径压缩函数。例如,发现(3)将找到4,然后找到2,然后逐渐返回到分配。最后,它成为查找功能。这是找到树的根节点的过程,并且路径压缩不断。
了解查找功能,然后我们可以查看[find(y)] = find(x);查找(y);
找到X根节点的根节点到Y的根节点,您可以清楚地理解图形。至于为什么我在这里写一个发现,这是路径压缩操作。标题需要
理解后,通常会检查以合并https://vjudge.net/article/752前三个通常是一起检查的
带上电力并检查所有人,您可以看到这个大个子的博客,并详细说明了力量和收藏
https://blog.csdn.net/yjr3426619/article/details/82315133