【算法】无趣的并查集

22人阅读 评论(0) 收藏 举报
分类:

并查集


定义

把许多有关系的人合并成一个集合
然后询问其中的人是否有关系的时候用并查集


思路

存图
每一次输入判断他们的祖先是否同一个
不同的话就把两个数的祖先改成同一个
最后的询问只要O(1)


例子和代码

一个入门的并查集题目

洛谷P1551:https://www.luogu.org/problemnew/show/P1551

代码:

#include<iostream>
using namespace std;
int father[5001];
int n,m,p;
int find(int x)
{
    if(father[x]!=x)//路径压缩优化
    father[x]=find(father[x]);//把路上的所有点祖先全部改掉
    return father[x];
}
void unionn(int x,int y)
{
    father[y]=x;//y的祖先为x的祖先
                //相当于合并祖先
}
int main()
{
    cin>>n>>m>>p;
    for(int i=1;i<=n;i++)
    {
        father[i]=i;//所有数据初始祖先为自己
                    //独立的一个数为一个集合
    }
    for(int i=1;i<=m;i++)
    {
        int x,y;
        cin>>x>>y;
        int r1,r2;
        r1=find(x);
        r2=find(y);//寻找两个数的祖先
        if(r1!=r2)//如果不是同一个祖先
        {
            unionn(r1,r2);//合并
        }
    }
    for(int i=1;i<=p;i++)
    {
        int x,y;
        cin>>x>>y;
        if(find(x)==find(y))//如果是同一个祖先
        {
            cout<<"Yes"<<endl;//是
        }
        else
        cout<<"No"<<endl;//否
    }

}
查看评论

史上最浅显易懂的并查集算法

并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定。不分享出来真是对不起party了。(party:我靠,关我嘛事啊?我跟你很熟么?)...
  • u011487593
  • u011487593
  • 2015-09-17 19:48:58
  • 830

小谈并查集及其算法实现

并查集   一、算法介绍: 并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。   并查集的基本操作有两个: 1:合并 union(x, ...
  • hpuhjh
  • hpuhjh
  • 2015-08-21 14:49:36
  • 3163

并查集算法介绍

我们在一些应用当中,经常会遇到将n个不同的元素分成一组不相交的集合,例如某省调查城镇交通状况,得到现有城镇道路统计表,当我们知道每条道路直接连通的城镇时,问最少还需要建设多少条道路才能使全省任何两个城...
  • qianchenglenger
  • qianchenglenger
  • 2015-08-09 18:57:58
  • 2965

【算法】并查集的运用

并查集的概念 朋友圈 团伙问题 连通图 总结并查集的概念并查集顾名思义就是合并和查找,问题在于合并什么,查找什么。这里有一种朴素的思想来解释这两个问题。就是把这个想成一棵树。合并什么?就是把不在这棵树...
  • gesanghuazgy
  • gesanghuazgy
  • 2016-08-10 20:18:16
  • 1136

算法之并查集 C语言实现3

头文件 UnionFind3.h#ifndef UNIONFIND3_H_INCLUDED #define UNIONFIND3_H_INCLUDED #include "stdlib.h" #inc...
  • qq_29731079
  • qq_29731079
  • 2017-03-14 19:45:27
  • 552

并查集(Union Find set)基础

  • 2008年11月15日 19:43
  • 403KB
  • 下载

算法熟记-并查集

转载地址:http://www.cnblogs.com/pangxiaodong/archive/2011/05/27/2059547.html 算法熟记-并查集 ...
  • stloztoeplitz
  • stloztoeplitz
  • 2016-12-08 20:13:12
  • 241

并查集入门基础

 最近写了一个多星期的并查集,一瞬间贴出这么多解题报告,我想关于并查集的应用先告一段落吧,先总结一下。 在网上看到一篇关于并查集比较好的教程(姑且允许我这么说吧),不转过来是在可惜。献给爱...
  • wikioi_bai
  • wikioi_bai
  • 2014-10-05 12:20:37
  • 746

快速并查集(Java实现)

在一些应用的问题中,需将n个不同的元素划分成一组不相交的集合。开始时,每个元素自成一格单元素集合,然后按一定顺序将属于同一组的元素的集合合并。其间要反复用到查询某个元素属于哪个集合的运算。适合于描述这...
  • why_still_confused
  • why_still_confused
  • 2016-05-25 14:09:15
  • 2625

java实现并查集算法

并查集 并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。集就是让每个元素构成一个单元素的集合,也就是按一定顺序将属于同一组的...
  • qq_33535433
  • qq_33535433
  • 2017-07-13 21:43:31
  • 214
    个人资料
    持之以恒
    等级:
    访问量: 390
    积分: 154
    排名: 110万+
    文章存档
    最新评论