zoukankan      html  css  js  c++  java
  • 并查集与二部图

     今天做 Codeforces 687D 突然发现并查集学得很屎。

    问题是给你两个二部图的连通分量,用并查集表示,其中每个联通分量都有一个根。每个点有一个rela[i]代表这个点的颜色与根相同还是不同。

    问如何将这两个集合合并,并维护rela。

    想法很简单,判断添加边的两个点原先跟他们根的关系,若相同,则调整其中一根的值取反,然后合并。中间的思想跟种类并查集一致。

    然后我就陷入屎循环了==

    这东西如何和表示,种类并查集的递归那该怎么搞==

    一开始用取反,果断WA了,想了很久,才发现,当根合并的时候,假设将根b合并到根a,那么根a和根b的颜色是可以相同的。

    正解是抑或,并且保证根的rela为0。

    递归的时候写成

    int findme(int a){
        if(a==me[a])
            return a;
        int u=findme(me[a]);
        rela[a]^=rela[me[a]];
        me[a]=u;
        return u;
    }

    仔细想想==

  • 相关阅读:
    Java绘出pdf实现方法
    Java设置字体颜色
    猜测分箱算法
    获取图片存储到本地
    input(file)异步上传文件
    物流轨迹抓取
    bootstrap 模态框
    从数组中随机选择一个数
    spring cron表达式
    mabtis批量修改
  • 原文地址:https://www.cnblogs.com/tun117/p/5667882.html
Copyright © 2011-2022 走看看