这个题解不错。
首先,10 万组询问,10 万的点和边,能且仅能用并查集判断图的连通性。
看到 & 就要想到非严格单调递减,看到 | 就要想到非严格单调递增。
不难发现样例中答案只有 0,1,2
,仔细想想,就会发现不可能存在 2 1 0
的序列,因为一旦有了 2,末尾就一定是 0,和任何数 & 都不可能是 1。换言之,0 和 1 和 2 不可能同时出现,根据 mex 的定义,答案一定在它们之中。
答案是 0 很好理解:0 没有出现过。至少有一位一直是 1,否则全部位置都没法一直是 1,也就是必然存在一条边,走到它之后全部位都出现过 0,那么 0 就出现过了,就矛盾了。所以判断沿着每一位是 1 的边,判断一下 u 和 v 是否连通即可(注意枚举每一位和至少的限制是等价的,很好证明)。
答案如果不是 0,是 1 呢?1 没有出现过,又因为 & 的性质非严格单调递减,所以序列(\(w_1, w_1 \& w_2..\))应该是一堆大于 1 的数,然后直接变成 0 。位运算的题最好还是拆位考虑,最低位也是单调减的,所以是一堆 1,然后一堆 0。而且前面的数都大于 1,所以是最低位一直是 1,并且其它位上至少有一位一直是 1,这其实就是奇数权值的边,然后沿着各个位一直走,看下能否走到最低位是0的边。而后者其实就是偶数边权的边。因为只要走到就行,我们直接把所有和偶数边直接相连的点放进一个集合,然后判断 u 能否和这个集合联通即可。现在剩下了 v,其实我们会发现,这个时候 v 已经不重要了,因为走到了偶数边之后,可以随便走,都不可能出现 1,因为前面判断过了,最后一定会出现 0,所以必然可以随便走,走到 v,路径满足要求。
标签:连通,判断,Walk,偶数,答案,出现,MEX,单调 From: https://www.cnblogs.com/zhangchenxin/p/17831004.html代码实现中,忽视了奇数边权的限制,但是也是对的。因为如果偶数边连进来了,不会影响答案。(不连通就不会有偶数边加进来,加进来就说明一定连通)