la4487 加权并查集,异或的性质
2016-06-06 15:06
323 查看
两个数异或是一个值,这个时候只要再有任意一个数,两个数就都可以知道了
而如果知道了a和b的异或,a和c的异或,显然就可以知道b和c的异或
对于这题首先我的思路:
我的思路特别麻烦……因为受到了以前做并查集一题的影响:每个数的每一位都存起来,把它与它的反都存一遍,并查集维护与他相同的位的,并且用一个0一个1来表示和其他位的关系
但是问题在于……碰到一大堆异或在一起的话,有一些未知关系不好处理……好烦
网上的思路
pa[]存储每个的父节点,xor[]存储每个与父节点的异或值
设置一个特殊节点,比如0或者全1,他必须作为父亲节点,然后对于第一种操作,就把一个点与特殊节点连接起来,存异或值,对第二种操作,就把相关节点连起来,注意,如果有一个点的父节点是特殊节点,特殊节点要作为父节点。
对于查询
首先根据交换律,把在一个集合里的都弄出来
然后把已知值得都算好
其他集合中,偶数次异或,可以消除根节点,可以计算,奇数次异或,不能消除根节点,不能算
迷之难啊……
//真的不知道看题解有没有用啊啊……其实这题就是说,有互相异或关系的集合能算,其他不行。
而如果知道了a和b的异或,a和c的异或,显然就可以知道b和c的异或
对于这题首先我的思路:
我的思路特别麻烦……因为受到了以前做并查集一题的影响:每个数的每一位都存起来,把它与它的反都存一遍,并查集维护与他相同的位的,并且用一个0一个1来表示和其他位的关系
但是问题在于……碰到一大堆异或在一起的话,有一些未知关系不好处理……好烦
网上的思路
pa[]存储每个的父节点,xor[]存储每个与父节点的异或值
设置一个特殊节点,比如0或者全1,他必须作为父亲节点,然后对于第一种操作,就把一个点与特殊节点连接起来,存异或值,对第二种操作,就把相关节点连起来,注意,如果有一个点的父节点是特殊节点,特殊节点要作为父节点。
对于查询
首先根据交换律,把在一个集合里的都弄出来
然后把已知值得都算好
其他集合中,偶数次异或,可以消除根节点,可以计算,奇数次异或,不能消除根节点,不能算
迷之难啊……
//真的不知道看题解有没有用啊啊……其实这题就是说,有互相异或关系的集合能算,其他不行。
相关文章推荐
- Spring官方文档学习(0)
- 新版flume+kafka+storm安装部署
- Flatten Binary Tree to Linked List
- 数据库操作集合
- iOS RTMP 视频直播开发笔记(3) --- 与帧相关的概念
- Android 手机抓包方法(一)
- Linux下Mysql安装多实例 & 主从配置
- Python学习笔记 —— 数字类型【Numbers】及常用方法
- 第十五周程序阅读-范型程序设计(5)
- linux挂载磁盘及磁盘格式化
- C#中的ASCII转换
- 这应该是迄今为止最全的一份Java就业指导书
- 截取整个ScrollerView视图
- oracle imp (表导不出)
- java内存模型
- Python装饰器与面向切面编程
- git and github 学习笔记
- [转]SpringMVC工作原理
- Convert.ToInt32(Object, IFormatProvider)的含义
- iOS 屏幕方向