美文网首页
数据结构-并查集

数据结构-并查集

作者: Githubforusc | 来源:发表于2018-11-27 12:43 被阅读0次

并查集 洛谷(P3367)

       在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中,其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受;即使在空间上勉强通过,运行的时间复杂度也极高,根本就不可能在比赛规定的运行时间(1~3秒)内计算出试题需要的结果,只能用并查集来描述


输入输出格式

输入格式:

第一行包含两个整数N、M,表示共有N个元素和M个操作。

接下来M行,每行包含三个整数Zi、Xi、Yi

当Zi=1时,将Xi与Yi所在的集合合并

当Zi=2时,输出Xi与Yi是否在同一集合内,是的话输出Y;否则话输出N

输出格式:

如上,对于每一个Zi=2的操作,都有一行输出,每行包含一个大写字母,为Y或者N
输入样例#1:

4 7
2 1 2
1 1 2
2 1 2
1 3 4
2 1 4
1 2 3
2 1 4

输出样例#1:

N
Y
N
Y

#include<bits/stdc++.h>
using namespace std;
int i,j,k,n,m,s,ans,f[10010],p1,p2,p3;
//f[i]表示i的集合名
int find(int k){
    //路径压缩
    if(f[k]==k)return k;
    return f[k]=find(f[k]);
}
int main()
{
    cin>>n>>m;
    for(i=1;i<=n;i++)
        f[i]=i;//规定i的祖先为自己
    for(i=1;i<=m;i++){
        cin>>p1>>p2>>p3;
        if(p1==1)
            f[find(p2)]=find(p3);  //令p2的祖先为p3的祖先
            //合并操作就是把一个节点的祖先变为另一个节点的祖先
        else
            if(find(p2)==find(p3))
                printf("Y\n");
            else
                printf("N\n");
    }
    return 0;
}



并查集的单次查询理想复杂度应该是O(logn)的,但是如果有一个这样的数据,并查集的复杂度就是O(n)了


为了避免这种情况,我们需对路径进行压缩。

即当我们经过找到祖先节点后,回溯的时候顺便将它的子孙节点都直接指向祖先,使以后的查找复杂度变回O(logn)甚至更低,让


相关文章

  • 并查集

    并查集 并查集是什么 并查集是一种用来管理元素分组情况的数据结构,并查集可以高效地进行如下操作: 查询元素a和元素...

  • 并查集

    并查集是什么 并查集是一种用来管理元素分组情况的数据结构。并查集可以高效地进行如下操作。不过需要注意并查集虽然可以...

  • Union-Find algorithm-并查集算法

    并查集 并查集(Union-Find Set),也称为不相交集数据结构(Disjointed Set Data S...

  • 高级数据结构:并查集(Java 实现)

    并查集的内容非常简单,代码的每个方法的实现都很短,难在灵活应用。 并查集基础 为什么叫并查集?因为在这个数据结构中...

  • 最小生成树算法——Kruskal算法

    算法思想 先了解下什么叫并查集 并查集 (Union Find Set)又叫不相交集数据结构(Disjointed...

  • luogu P1551 亲戚(并查集入门)

    这是一个并查集模板。 说一下并查集,虽然我也是刚刚学会没几天。。。 并查集是个树形结构的数据结构,主要用于合并两个...

  • markdown学习

    #并查集 ##并查集的定义 ##并查集的操作

  • 数据结构——并查集

    目录 1、等价关系和等价类 2、并查集实现中的权衡 2.1、快速FIND实现(Quick FIND) 2.2、快速...

  • 数据结构 - 并查集

    相关概念 等价关系若对于每一对元素(a, b), ![](http://latex.codecogs.com/sv...

  • 数据结构-并查集

    并查集 洛谷(P3367) 在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集...

网友评论

      本文标题:数据结构-并查集

      本文链接:https://www.haomeiwen.com/subject/kvlgqqtx.html