• 并查集学习


    转载请注明来源:https://www.cnblogs.com/TheSilverMoon/p/9309481.html

    并查集简单点说就是判断图的两个点是否连通,但是一个个查找很麻烦,怎么办呢?那就让他们的老大直辖所有的小弟,所以我们每次查询只要看他们俩的老大是不是一样的就可以了。

    下面是我的并查集代码

    同时推荐一个大佬的解释,很有意思https://blog.csdn.net/u013546077/article/details/64509038

    #include <bits/stdc++.h>
    #define fi first
    #define se second
    #define pb push_back
    #define fio ios::sync_with_stdio(false);cin.tie(0);
    #define pii pair<int,int>
    #define vi vector<int>
    #define vc vector<char>
    #define pi 3.1415926
    
    const int INF=0x3f3f3f3f;
    const int N=1e5+5;
    
    typedef long long ll;
    typedef double db;
    typedef unsigned long long ull;
    using namespace std;
    
    int pre[N];//记录各个点的上一个节点,如果自己是老大就等于自己
    
    int findRoot(int n)//查找根节点
    {
        int r=n;
        while(pre[r]!=r)//查找这个点的根节点
        {
            r=pre[r];
        }
        //r现在是根节点
        int i=n,j;
        while(i!=r)//路径压缩,让小弟直接归老大直辖
        {
            j=pre[i];
            pre[i]=r;
            i=j;
        }
        return r;
    }
    
    void join(int x,int y)//把各个连同分支连起来
    {
        int r1=findRoot(x);
        int r2=findRoot(y);
        if(r1!=r2)//如果已经连通不用管
        {
            pre[r1]=r2;//不连通的时候随便指定一个是另一个的老大
        }
    }
    
    int main()
    {
    
    }
  • 相关阅读:
    FAT学习笔记(五)——FAQ
    FAT32学习笔记(五)——fat相关工具
    FAT学习笔记(四)——Dir Entry
    FAT学习笔记(三)--FSInfo
    zabbix介绍
    配置pxe 自动化安装centos6.7
    跳转方式用name方法的话,浏览器返回按钮点击返回时会有BUG
    FormData使用方法详解
    vue中的@click.native
    vue从后台获取数据,并导出EXCEL文件
  • 原文地址:https://www.cnblogs.com/TheSilverMoon/p/9309481.html
Copyright © 2020-2023  润新知