parity game(一道并查集的毒瘤题)

本文介绍了如何使用并查集解决一道关于奇偶性判断的题目。通过维护区间奇偶性,利用加权并查集和异或运算,判断输入信息的正确性。当所有信息正确时,输出信息总数;否则,输出第一个错误信息的位置-1。
摘要由CSDN通过智能技术生成

题面如下:
有一个01序列,长度n<=1000000000,现在有t条信息,每条信息的形式是:a ,b even/odd,表示第a位到第b位元素之间的元素总和是偶数/奇数。 你的任务是对于这些给定的信息,输出第一个不正确的信息所在位置-1。信息的数目不超过5000。 如果信息全部正确,那么输出t。

看到这道题的第一眼:???这竟然是并查集??怎么有点交互题的味道~~

虽然这道题对于大佬们来说so easy,但我这样的蒟蒻道行还是不够。

开始正文:

对于这道题,我们并不一定要求出原序列到底是什么样子的(当然,我们也求不出来),但是,我们可不可以从另一个角度来考虑一下。既然不能求出具体的值,那我是不是只要维护奇偶性就可以了呢?

答案是显然的。就比如,输入:34,45,even,这就相当于 s u m [ 45 ] − s u m [ 33 ] sum[45]-sum[33] sum[45]sum[33]的值为偶数(sum数组指前缀和,这里只是为了帮助理解而使用的,代码中用不上),也就是意味着, s u m [ 45 ] sum[45] sum[45] s u m [ 33 ] sum[33] sum[33]的奇偶性相同。那么,我们就可以对33和45进行并查集的维护了。

同理,若输入为: L , R , o d d / e v e n L,R,odd / even L,R,odd/even,若输入为 o d d odd odd,则代表

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值