题目描述

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

输入

• 输入文件
• 第一行一个整数 m 表示 01 序列的长度,第二行一个整数 n 表示信息的数目。
• 接下来是 n 条信息

输出

输出第一条错误信息的位置-1.

如果没有错误信息,则输出n

样例输入

10
5
1 2 even
3 4 odd
5 6 even
1 6 even
7 10 odd

样例输出

3
这道题可以用并查集的思路做
将第三行数据的1 2看做半开半闭区间( 0 , 2 ]中的所有整数元素,他们的和是偶数,可将0当做2的父亲,他们之间的距离为0(偶数mod2的余数)
以此类推,如果为奇数,则他们之间的距离为1
那么,输入x和y,找到他们各自的父亲g和h,如果g不等于h,则无需验证,将g作为h的父亲,其距离计算公式为:
s[ h ]=( s[ x ] + m - s[ y ] )%2
其中m为x到y的和的奇偶性(看不懂就慢慢想)
如果,g等于h,则进行验证,看看abs( s[ x ] - s[ y ] )%2是否满足此语句的奇偶性
整体思路到位
接下来,由于输入的x和y最大为十亿,无法开出这么大的数组,则必须将其理想化
由于只有5000条语句,所以元素最多只有10000个,则用数组将输入的x和y装进去,要验证的时候直接数组里面找,将其在数组中的编号代替其本身进行运算
还不明白?看代码吧:
[cpp]  view plain copy
  1. #include<cstdio>
  2. #include<cstring>
  3. #include<cmath>
  4. #include<algorithm>
  5. using namespace std;
  6. int abs(int x){return x>=0?x:-x;}
  7. int a[10001];
  8. int f[10001],s[10001];
  9. int m,n,k;
  10. int find(int x)//找父亲与离父亲的距离,顺便找沿路所有元素与离父亲的距离(看不懂?自己慢慢想)
  11. {
  12. if(f[x]==0)return x;
  13. int xx=find(f[x]);
  14. s[x]+=s[f[x]];
  15. s[x]%=2;
  16. return f[x]=xx;
  17. }
  18. int main()
  19. {
  20. int i,j;
  21. scanf("%d%d",&m,&n);
  22. for(i=1;i<=n;i++)
  23. {
  24. char c[11];
  25. int x,y,r1,r2;
  26. scanf("%d%d%s",&x,&y,c);
  27. if(x>m||y>m){printf("%d",i-1);return 0;}
  28. if(x>y)swap(x,y);
  29. x--;//半开半闭区间,小的元素减减
  30. bool p=0,q=0;
  31. for(j=1;j<=k;j++)//找数组中是否有x和y
  32. <span style="white-space:pre">  </span>{
  33. if(a[j]==x&&!p)x=j,p=1;
  34. if(a[j]==y&&!q)y=j,q=1;
  35. }
  36. if(!p)a[++k]=x,x=k;//没有就将其加进去
  37. if(!q)
  38. {
  39. if(x!=y)a[++k]=y,y=k;//这里要注意
  40. else y=x;
  41. }
  42. r1=find(x),r2=find(y);
  43. if(r1!=r2)
  44. {
  45. if(r1>r2)swap(r1,r2);
  46. f[r2]=r1;
  47. if(c[0]=='o')s[r2]=abs(s[x]+1-s[y])%2;
  48. else s[r2]=abs(s[x]-s[y])%2;
  49. }
  50. else//验证
  51. {
  52. if(c[0]=='o'&&abs(s[x]-s[y])%2!=1){printf("%d",i-1);return 0;}
  53. if(c[0]=='e'&&abs(s[x]-s[y])%2){printf("%d",i-1);return 0;}
  54. }
  55. }
  56. printf("%d",n);
  57. }

并查集——奇偶性(Parity)相关推荐

  1. 【转】并查集MST题集

    转自:http://blog.csdn.net/shahdza/article/details/7779230 [HDU] 1213 How Many Tables 基础并查集★ 1272 小希的迷宫 ...

  2. P5937 [CEOI1999]Parity Game-扩展域并查集与离散化处理

    题目链接[CEOI1999]Parity Game - 洛谷 单调队列优化多重背包(全网最详细解析)_秦三马和他的CF生涯的博客-CSDN博客 考察内容,扩展域并查集,本题中把奇偶性相同归为一个集合, ...

  3. Ural_1003 Parity(并查集)

    /*发现并查集的应用太巧妙了...大体思路:从题中可以看出来如果(i, j)是even的话,sum(i-1) 和 sum(j)的奇偶性相同.(i, j)如果是odd的话则其奇偶行不同.定义奇偶性为朋友 ...

  4. Parity(带权值的并查集)

    你的朋友写下一串包含1和0的串让你猜,你可以从中选择一个连续的子串(例如其中的第3到第5个数字)问他,该子串中包含了奇数个还是偶数个1,他会回答你的问题,然后你可以继续提问......你怀疑朋友的答案 ...

  5. [POJ1733]Parity game(并查集 + 离散化)

    传送门 题意:有一个长度已知的01串,给出[l,r]这个区间中的1是奇数个还是偶数个,给出一系列语句问前几个是正确的 思路:如果我们知道[1,2][3,4][5,6]区间的信息,我们可以求出[1,6] ...

  6. 【无码专区9】序列统计(带权并查集 + 前缀和建边 + dp)

    因为只有std,没有自我实现,所以是无码专区 主要是为了训练思维能力 solution才是dls正解,但是因为只有潦草几句,所以大部分会有我自己基于正解上面的算法实现过程,可能选择的算法跟std中dl ...

  7. 我知道并查集的可爱之处

    请开始您的并查集之旅 迈入门槛 文字概念 故事配图辅助理解 浅尝辄止 畅通工程 程序自动分析 supermarket 慢慢深入 银河英雄传说 parity game 1.带权并查集 2.扩展域并查集 ...

  8. 牛客题单——同余、并查集

    题单链接 Strange Way to Express Integers(表示整数的奇怪方式) 这道题之前已经写过了,不重复写了,下面是链接 中国剩余定理 程序自动分析 这道题很明显是用并查集解决的 ...

  9. 并查集算法总结专题训练

    并查集算法总结&专题训练 1.概述 2.模板 3.例题 1.入门题: 2.与别的算法结合: 3.考思维的题: 4.二维转一维: 5.扩展域并查集&边带权并查集: 4.总结 1.概述 并 ...

最新文章

  1. curl命令具体解释
  2. FAT AP和FIT AP 区别 (无线篇)
  3. 【springboot】静态资源设置缓存时间
  4. git clone 多个_如何通过Git参与项目开发
  5. havc是什么意思_avc是什么意?eduis里h.264/a – 手机爱问
  6. 高薪Java开发工程师需要掌握哪些技能?
  7. Ubuntu命令整理
  8. Unity 3D 游戏引擎
  9. 学弟学妹看我文章顺利毕业,基于HTML+Javascript五子棋人机博弈系统设计与实现《记得收藏》
  10. 6 个清除 Linux 终端的命令
  11. 自定义vscode插件路径及离线安装VSIX说明
  12. 古罗马帝国莱茵河-多瑙河防线之谜
  13. Java 移除List中的元素,这玩意讲究!
  14. 软件开发的能力体系及锻炼
  15. 刘强东怼天猫,是在陈述事实还是另有深意?
  16. 如何使用(免费软件)Microsoft ICE轻松扫描大图片
  17. 计算机屏幕节省电,【火腿课堂】当FT8/FT4数字模式遇上电脑“屏幕保护程序或省电模式”时...
  18. 打印样式CSS的技巧浅谈
  19. 【文件上传绕过】——解析漏洞_IIS7.0 | IIS7.5 | Nginx的解析漏洞
  20. 商业汇票、银行本票、支票的区别

热门文章

  1. 非对称密钥PKCS#1和PKCS#8格式互相转换(Java)
  2. IEEE754数据格式介绍和解析方式(超权威)
  3. C语言String类型小结
  4. CentOS7 启动docker.service失败
  5. 2015年5月产品设计学习与思考
  6. 花店商城Flower Shop网站前端HTML页面模板源码
  7. iphone怎在计算机硬盘打开,iPhone怎么备份数据到电脑硬盘【详解】
  8. 关于position:fixed;的居中问题
  9. Linux内核编译、启动和相关驱动构建
  10. 电子工程师的自我修养 - 单片机控制继电器