又是一道神奇的并查集,话说以前在POJ上做并查集,就使用过所谓偏移向量,儿子跟父亲的关系用一个向量值表示出来,然后儿子和儿子之间的关系也能通过一些向量关系转化,而这道题也应该是并查集的偏移向量的运用,只不过复杂了那么一点,变成了异或运算,然后插入的时候有一些小的精妙想法,后来看别人的思路才发现,真是惭愧之极,这样才AC了。
插入的时候,会出现两个数,或者三个数的情况,其实都可以转化为三个数,我们都知道一个数跟0的异或值都是他本身,那么只要把赋值运算等价于跟一个值为0的节点异或就行了,不妨设这个节点为n,然后互相有关系的都放到一个集合里,我们观察偏移向量可以得知,实际上一些节点的异或值可以转化为他们与父亲节点的异或值再一起异或,如果父亲节点的个数是偶数,那么显然对结果无影响,如果是奇数,只要父亲节点的值知道,那么也是能算出来的,那么我们在并查集的并操作中,因为标号n的节点值已经知道,所以尽量要让他成为父亲节点,这样的话,所有已经赋值的节点都在n的集合内,显然,如果出现已知两个节点的异或值和一个节点的值,求另一个节点的值时,那么由于这个节点的父亲节点是n,那么只要和这个点相关的节点都和n的集合合并,值也就出来了,就这样,只要值知道的节点都会在n集合内,父节点不是n的节点的值必然不知道。那么最后也就好判断了。
分享到:
相关推荐
ACM HDU 2000->2099 解题报告 ACM HDU 2000->2099 解题报告 ACM HDU 2000->2099 解题报告
ACM题库,一些题目和答案,以及解题报告,传上来共享
其中一类查询要求 更新 数组 nums 下标对应的值另一类查询要求返回数组 nums 中索引 left 和索引 right 之间( 包含 )的nums元素的 和
杭电OnlineJudge 200-2099的解题报告
HDU 里面的2000~2099道题目的源码。谢谢支持
杭电ACM2000-2099题的解题报告
基础算法类 ACM 入门 杭电OJ 11页题目题解,算法入门的时候刷题可以参考 搜集整理起来了比单个去搜题解方便快捷
示例 1:输出:[1,2,3,7,8,11,12,9,10,4,5,6]输入的多级列表如下图所示:扁平化后的链表如下图:示例 2:输出:[1,3,2]解释:输入
可拆卸核心板滤波电容电源指示灯排针复位F103--R10不焊F207--R9不焊第19引脚F103--C4焊0欧姆,C3不焊Tuesday, August 31
排母,核心板接口ADC 电位器扩展接口,预留模拟量Tuesday, August 31, 2021Tuesday, August 31, 2021Tuesday
hdu-acm源代码(上百题)hdu-acm源代码、hdu-acm源代码hdu-acm源代码
求多源点到单终点的最短路(反向建图),ACM竞赛中应用的小程序。
HDU 1010-2500解题报告,ACMer可以借鉴一下
示例 1:示例 2:解答:大小写转换: n = n ^ 32转小写: n = n | 32转大写: n = n & -33const toLowerCase =
2016. 增量元素之间的最大差值题目描述:给你一个下标从 0 开始的整数数组 nums ,该数组的大小为 n ,请你计算 nums[j] - nums[i]
hdu2000-2014ac代码,虽然只有几道,但都是简单的
杭州电子科技大学ACM Steps中Chapter One-Section One的答案集。不要直接抄哦~~ 如需题解请上我的博客~ 博客地址呈上:http://blog.csdn.net/xu_zh