并查集 学习

并查集

文章:并查集原理
  • 作用:
    • 合并:将两个不相交的集合合并为一个集合
    • 查询:查询两个元素是否在同一个集合中
初始化

假如有编号为1, 2, 3, …, n的n个元素,我们用一个数组fa[]来存储每个元素的父节点(因为每个元素有且只有一个父节点,所以这是可行的)。一开始,我们先将它们的父节点设为自己。

int f[N];
int re[N];
int n,m,p;
void init()
{
    for(int i = 1; i <= n; i++)
    {
        f[i] = i;
    }
}
查找根节点(路径压缩)
int find(int x)// 利用递归思想
{
    if(f[x] == x)
    {
        return x;//如果该节点等于自己,就表明该节点为根节点,就返回该节点
    }
    else
    {
        f[x]=find(f[x]); //将父节点也设为根节点
        return f[x];		//返回父节点
    }

}
合并
void merger(int a,int b)
{
    int j = find(a),i = find(b);//先找到两个根节点
    f[j] = i; //设置为新的根节点
}
  • 题目:
    • 洛谷
      • P1551 亲戚
      • P3958 奶酪
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值