奇偶game

证明一下边带权做法的充分性

我们考虑异或和

对一个01序列,我们做一个异或前缀和,设为sumn,那么ai=sumixorsumi1

对任何时刻的没有产生矛盾的并查集森林,我们随便给每个森林的根节点赋值一个0或1,那么其他所有节点的值也能够推导出来(注意中途不可能重复赋值,因为一个点只属于一个集合),如果序列中还剩余一些点没有赋值,就随便赋0或1,然后赋的值作为异或前缀和,就可以推导出来一个符合条件的01序列了

在讨论一下扩展域的做法,一般来说扩展域都可以这么理解

就像蓝书上面说的一样,xoddxeven分别表示x是奇数和偶数,那么连接就代表可以互相推出

我们以前忽略的最严重的一点是,连接后的森林,他是完全对称的,就像下面这样(其中一个方框代表一个并查集集合)

那么对于一个还没有产生矛盾的森林,我们依次对每一排(注意是每一排)的其中一个赋值就好了,比如上图,我们考虑第一排,令x是奇数,推出y是偶数,然后右边那个方框就不用管了,令i是偶数,推出j是奇数,左边那个方框就不用管了

同边带权,这样对任意一个没有出现矛盾的森林都可以找到一个合法的序列(矛盾指xoddxeven在同一个连通块里面)

而合并时只用像蓝书说的那样合并就好了

这也解释了为什么代码里面只用判断一边关系就可以说明是否矛盾

update 2024.5.10

最后说一下这道题目其实就是在描述,可以将元素分为两类,给你一些条件问分法是否矛盾

然后可以用这个并查集做

posted @   最爱丁珰  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示