ACM—并查集

这个博客写的不错:

https://blog.youkuaiyun.com/u013546077/article/details/64509038

int pre[1000];
int find(int x)                                       //查找根节点
{ 
    int r=x;
    while ( pre[r] != r )                           //不是祖先,就继续往上找
          r=pre[r];
 
    int i = x , j ;
    while( i != r )                                   //路径压缩
    {
         j = pre[ i ]; 				// 在改变上级之前用临时变量  j 记录下他的值 
         pre[ i ] = r ; 				//把上级改为根节点
         i=j;
    }
    return r ;
}

void join(int x,int y)                           //判断x y是否连通,
                                               //如果已经连通,就不用管了 如果不连通,就把它们所在的连通分支合并起,
{
    int fx = find(x),fy = find(y);       //分别查找x,y的祖先
    if(fx != fy)                         //如果不属于一个集合,就将一个集合的祖先设置为另一个集合的祖先
        pre[fx] = fy; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值