您的位置:首页 > 其它

la4487 加权并查集,异或的性质

2016-06-06 15:06 323 查看
两个数异或是一个值,这个时候只要再有任意一个数,两个数就都可以知道了
而如果知道了a和b的异或,a和c的异或,显然就可以知道b和c的异或

对于这题首先我的思路:
我的思路特别麻烦……因为受到了以前做并查集一题的影响:每个数的每一位都存起来,把它与它的反都存一遍,并查集维护与他相同的位的,并且用一个0一个1来表示和其他位的关系
但是问题在于……碰到一大堆异或在一起的话,有一些未知关系不好处理……好烦

网上的思路
pa[]存储每个的父节点,xor[]存储每个与父节点的异或值

设置一个特殊节点,比如0或者全1,他必须作为父亲节点,然后对于第一种操作,就把一个点与特殊节点连接起来,存异或值,对第二种操作,就把相关节点连起来,注意,如果有一个点的父节点是特殊节点,特殊节点要作为父节点。
对于查询
首先根据交换律,把在一个集合里的都弄出来
然后把已知值得都算好
其他集合中,偶数次异或,可以消除根节点,可以计算,奇数次异或,不能消除根节点,不能算
迷之难啊……
//真的不知道看题解有没有用啊啊……其实这题就是说,有互相异或关系的集合能算,其他不行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: