0
点赞
收藏
分享

微信扫一扫

并查集__

泠之屋 2022-01-21 阅读 118
知识图谱

// 并查集
#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
using namespace std;

const int N=111;
int before[N];

int my_find( int n )
{
    int r=n,i=n,temp;

    // 只有  根节点的上级 == 它本身
    while( before[r]!=r ) r=before[r];
    
    // 路径压缩
    while( i!=r )           // 此r非彼r 当n不是根节点时 r值就已经变了
    {                       // 这里的r 就是根节点
        temp=before[i];     // 一开始 i=n   temp 暂存上级
        before[i]=r;        // 从下往上 将上级都改为根节点
        i=temp;             // 读取上级
    }
    return r;               // 返回 根节点
}

// 如果 a,b 的没有连通 ( 根节点不同 ) 任意将其一连接到另一
void my_link( int a,int b )
{
    int ra=my_find(a),rb=my_find(b);
    if( ra!=rb ) before[ra]=rb;       
}
/**/
举报

相关推荐

0 条评论