并查集的粗劣想法(易懂)

这里我自己说一下我自己学的感受吧 。

    int findset(int a)  //不带路劲压缩
    {
        while(pa[a] != a)
        {
            a = pa[a];
        }
        return a;
    }    

    void union_nodes(int a, int b)      //集合合并
    {
        int a1 = findset(a);
        int b1 = findset(b);
        if(a1 != b1)        //这个判定条件可选,主要是为了防止findset路径压缩的时候出现死循环
        {
            pa[a1] = b1;        //如果存的是有向图,并且做题时集合中元素的顺序很重要,不能忽略,那么这里应该用"pa[a] = b;"
        }
    }
    当时我刚刚接触的时候,也是看不太懂,然后自己去模拟一下过程,我粗劣的看成以下的结论

假设这里 有 甲乙丙丁茂, 这5个人,现在 你我要输入几组关系 ,然后询问某两个人是否有关系在

甲->茂  ,   丙->茂  ,  乙->丁

建一个数值 来表示 这五个人 【甲】【乙】【丙】【丁】【茂】

                                   下标是   1         2         3         4        5  

甲->茂  你可以看成是茂是甲的儿子或者是父亲(这里虽然是findfather但是我觉得 findson也是蛮好理解的)

             这样 你就将  1 对应的【甲】改成茂 

                                              【茂】【乙】【丙】【丁】【茂】

                                    下标是   1         2         3         4        5  

同样的  丙->茂  改成              【茂】【乙】【茂】【丁】【茂】

                                    下标是   1         2         3         4        5  

            乙->丁  改成               【茂】【丁】【茂】【丁】【茂】

                                     下标是   1         2         3         4        5  

改完之后 比如你要查询  甲丙有没有这样关系在  当你输入原本 在 1  ,3 两个值时你发现 甲不在了 你可以理解成 甲不知道 你去问一下和他有关系的茂看看 丙也一样 说我也不知道 你去问一下茂吧 就这样他们同时到了5 茂 发现5的值就是茂 你就可以理解成茂 并没有儿子 他是单独一人  而甲 , 丙都找到了茂,这样就说明他们有同样的 一个后代 “茂” 所以他们是有关系的

当询问 甲 乙 有没有关系 同样的过程 。 看到原本在1的甲 变成了茂 那我们就去 5 看看茂 发现茂没有变化过

询问乙的时候 ,发现乙变成了丁 这样询问4 丁,发现丁就丁。 那么丁和茂后面也没有后代去询问了,明显丁茂不存在关系,所以他们没有关系。

并查集的粗劣想法(易懂)

时间: 2024-08-15 00:23:21

并查集的粗劣想法(易懂)的相关文章

poj1611 并查集 (路径不压缩)

http://poj.org/problem?id=1611 题目大意: 有一个学校,有N个学生,编号为0-N-1,现在0号学生感染了非典,凡是和0在一个社团的人就会感染,并且这些人如果还参加了别的社团,他所在的社团照样全部感染,求感染的人数. 解题思路: 并查集的变种,实质就是求0所在的强连通图的结点数目. 这道题纠结在数据的输入上,他只是告诉你哪些学生是同一个社团的.这就需要处理一下,我的想法是:如果这个社团有num个孩子,new出一个大小为num的数组,第一个孩子不处理,从第二个孩子起,和

【并查集+离散化】BZOJ4195- [Noi2015]程序自动分析

[题目大意] 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量相等/不等的约束条件,请判定是否可以分别为每一个变量赋予恰当的值,使得上述所有约束条件同时被满足.例如,一个问题中的约束条件为:x1=x2,x2=x3,x3=x4,x1≠x4,这些约束条件显然是不可能同时被满足的,因此这个问题应判定为不可被满足. 现在给出一些约束满足问题,请分别对它们进行判定.

杭电3635-Dragon Balls(并查集)

Dragon Balls Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4582    Accepted Submission(s): 1747 Problem Description Five hundred years later, the number of dragon balls will increase unexpect

[【codechefCHSEQ22】Chef and Favourite Sequence(并查集)

题目:http://hzwer.com/3419.html 题意:给你一个全是0的数列,有m种操作[Li,Ri],每次操作就将下标处于[Li,Ri]的元素取反.你可以选若干个操作来使这个数列最后变成别的样子,求最后的数列有多少种 分析: 容易知道如果每个操作都是不能被其他操作的组合替代,那么这个操作就对操作集合有贡献,不妨设有x个这样的操作,既然ans=操作集合的子集数,那么ans=2^x 那么问题的关键就是如何判断一个操作能否被其他操作取代 一个很巧的想法是对于每个操作[Li,Ri],将点Li

CSP 201703-4 地铁修建【最小生成树+并查集】

问题描述 试题编号: 201703-4 试题名称: 地铁修建 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 A市有n个交通枢纽,其中1号和n号非常重要,为了加强运输能力,A市决定在1号到n号枢纽间修建一条地铁. 地铁由很多段隧道组成,每段隧道连接两个交通枢纽.经过勘探,有m段隧道作为候选,两个交通枢纽之间最多只有一条候选的隧道,没有隧道两端连接着同一个交通枢纽. 现在有n家隧道施工的公司,每段候选的隧道只能由一个公司施工,每家公司施工需要的天数一致.而每家公司最多只能修

Codeforces 755C:PolandBall and Forest(并查集)

http://codeforces.com/problemset/problem/755/C 题意:该图是类似于树,给出n个点,接下来p[i]表示在树上离 i 距离最远的 id 是p[i],如果距离相等则p[i]是 id 较小的点. 思路:一开始没什么想法,画几分钟图发现不到什么东西,后来想着 i 和 p[i] 有关系,那么就代表 i 和 p[i] 是属于同一棵树,那么不就是并查集了嘛.抱着试一试的心态搞了一下居然过了. 1 #include <cstdio> 2 #include <c

并查集与二部图

今天做 Codeforces 687D 突然发现并查集学得很屎. 问题是给你两个二部图的连通分量,用并查集表示,其中每个联通分量都有一个根.每个点有一个rela[i]代表这个点的颜色与根相同还是不同. 问如何将这两个集合合并,并维护rela. 想法很简单,判断添加边的两个点原先跟他们根的关系,若相同,则调整其中一根的值取反,然后合并.中间的思想跟种类并查集一致. 然后我就陷入屎循环了== 这东西如何和表示,种类并查集的递归那该怎么搞== 一开始用取反,果断WA了,想了很久,才发现,当根合并的时候

[CF#250 Div.2 D]The Child and Zoo(并查集)

题目:http://codeforces.com/problemset/problem/437/D 题意:有n个点,m条边的无向图,保证所有点都能互通,n,m<=10^5 每个点都有权值,每条边的权值定义为这条边连接两点的权值中的最小值. f(p,q)表示p到q的路径中边权的最小值,如果有多条路经,就取每条路径最小值中的最小值 要求的就是对于所有1<=p<=n,1<=q<=n,p≠q,f(p,q)的平均值 分析: 刚开始是想考虑每条边对总和的贡献,结果没想通. 一个很巧的办法

HDU 5176 The Experience of Love 带权并查集

The Experience of Love Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) [Problem Description] A girl named Gorwin and a boy named Vivin is a couple. They arrived at a country named LOVE. The country consisting of N