首页 > 其他 > 详细

并查集与二部图

时间:2016-07-13 22:50:37      阅读:258      评论:0      收藏:0      [点我收藏+]

 今天做 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;
}

仔细想想==

并查集与二部图

原文:http://www.cnblogs.com/tun117/p/5667882.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!