你的朋友写下一串包含1和0的串让你猜,你可以从中选择一个连续的子串(例如其中的第3到第5个数字)问他,该子串中包含了奇数个还是偶数个1,他会回答你的问题,然后你可以继续提问......你怀疑朋友的答案可能有错,或说同他之前的答案相互矛盾,例如:1 - 2 奇数,3 - 4 奇数,那么可以确定1 - 4 一定是偶数,如果你的朋友回答是奇数,就产生了矛盾。给出所有你朋友的答案,请你找出第一个出现矛盾的答案。

 
Input
  1. 1行:2个数N, QN为串的长度,Q为询问的数量。(2 <= N <= 100000, 2 <= Q <= 50000)
  2. 2 - Q + 1行:每行包括两个数以及一个字符串来描述朋友的回答,2个数中间用空格分隔,分别表示区间的起点和终点,后面的字符为"even""odd",表示朋友的答案。
Output
  1. 输出1个数,表示朋友的答案中第一个错误答案的位置,如果所有答案均不矛盾,则输出-1
Input示例
  1. 10 5
  2. 1 2 even
  3. 3 4 odd
  4. 5 6 even
  5. 1 6 even
  6. 7 10 odd
Output示例
  1. 4
  2.  
  3. 思路就是,用数组1n的空间表示这个序列有偶数个1,比如f[20]就表示序列120有偶数个1,也就是说都是从1开始的,数组1n的空间向右偏移n个位置表示这个序列有奇数个1.
    然后当输入(l,r)的时候,如果(l,r)有奇数个1,那么表示(1r)与(1l-1)奇偶性相反;如果(l,r)有偶数个1,那么表示(1r)与(1l-1)奇偶性相同;
    第一种情况分为前奇后偶和前偶后奇,前奇后偶则将(1r)与(1l-1+n)打上相同标记,也就是并查集一个分类的过程,后者如图。
    第二种情况分为同奇同偶,同样打标记如图。。。。字丑勿喷

  1. #include <iostream>
  2. #include <math.h>
  3. #include <algorithm>
  4. #include <stdio.h>
  5. #define maxn 100005
  6. using namespace std;
  7. int f[maxn*];
  8.  
  9. int find(int x)
  10. {
  11. return x==f[x]?x:f[x]=find(f[x]);
  12. }
  13.  
  14. void merge(int x,int y)
  15. {
  16. x=find(x),y=find(y);
  17. if(x!=y) f[x]=y;
  18. }
  19.  
  20. int main()
  21. {
  22. for(int i=;i<maxn*;i++) f[i]=i;
  23. int n,q,l,r,flag=-;
  24. char s[];
  25. cin>>n>>q;
  26. for(int i=;i<=q;i++)
  27. {
  28. cin>>l>>r>>s;
  29. if(flag==-)
  30. if(s[]=='e')
  31. {
  32. if(find(r)==find(l-+n)&&find(r+n)==find(l-))
  33. {
  34. flag=i;
  35. }
  36. else
  37. {
  38. merge(r,l-);
  39. merge(r+n,l-+n);
  40. }
  41. }
  42. else
  43. {
  44. if(find(r)==find(l-)&&find(r+n)==find(l-+n))
  45. {
  46. flag=i;
  47. }
  48. else
  49. {
  50. merge(r,l-+n);
  51. merge(r+n,l-);
  52. }
  53. }
  54. }
  55. cout<<flag<<endl;
  56. }
  1.  
  1.  

51nod-1204 并查集的更多相关文章

  1. 51nod 1204 Parity(并查集应用)

    1204 Parity 题目来源: Ural 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题   你的朋友写下一串包含1和0的串让你猜,你可以从中选择一个连续的子串 ...

  2. 51nod 1307 绳子与重物(并查集水了一发)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1307 题意: 思路: 可以直接二分答案,然后dfs. 因为标签是并查集, ...

  3. 51nod 1515 明辨是非 [并查集+set]

    今天cb巨巨突然拿题来问,感觉惊讶又开心,希望他早日康复!!坚持学acm!加油! 题目链接:51nod 1515 明辨是非 [并查集] 1515 明辨是非 题目来源: 原创 基准时间限制:1 秒 空间 ...

  4. 51Nod 1515 明辨是非 —— 并查集 + 启发式合并

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1515 1515 明辨是非  题目来源: 原创 基准时间限制:1 ...

  5. 51nod 1515 明辨是非 并查集 + set + 启发式合并

    给n组操作,每组操作形式为x y p. 当p为1时,如果第x变量和第y个变量可以相等,则输出YES,并限制他们相等:否则输出NO,并忽略此次操作. 当p为0时,如果第x变量和第y个变量可以不相等,则输 ...

  6. 51NOD 1821 最优集合 [并查集]

    传送门 题意: 一个集合S的优美值定义为:最大的x,满足对于任意i∈[1,x],都存在一个S的子集S',使得S'中元素之和为i. 给定n个集合,对于每一次询问,指定一个集合S1和一个集合S2,以及一个 ...

  7. 51nod - 1163 巧妙的并查集 O(1)维护区间

    有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励.在结束时间之前完成该任务,就可以获得对应的奖励.完成每一个任务所需的时间都是1个单位时间.有时候完成所有任务是不可能的,因为时间上可能会有冲突 ...

  8. 51nod 1515 明辨是非 并查集+set维护相等与不等关系

    考试时先拿vector瞎搞不等信息,又没离散化,结果好像MLE:后来想起课上讲过用set维护,就开始瞎搞迭代器...QWQ我太菜了.. 用并查集维护相等信息,用set记录不相等的信息: 如果要求变量不 ...

  9. 51nod 1456【强连通,缩点,并查集】

    话说这道题的机遇是看到了http://blog.csdn.net/u010885899/article/details/50611895很有意思:然后就去补了这题 题意: 建最少的边使得给出的点相连. ...

  10. 51nod 1515:明辨是非 并查集合并

    1515 明辨是非 题目来源: 原创 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题  收藏  关注 给n组操作,每组操作形式为x y p. 当p为1时,如果第x ...

随机推荐

  1. vue-element-admin安装失败的问题

    根据官网的介绍,从GitHub下载以后,安装依赖的时候一直不成功,试了很多办法,最终解决 先记录错误的过程: 从GitHub下载 在当前文件夹的地址栏输入 “cmd” 打开窗口 输入 npm inst ...

  2. vuedraggable 实现拖动数据改变

    // 引入组件 import Draggable from 'vuedraggable' // 使用组件 DragList 为自己封装好的组件 注意一定要使用vue的sync <DragList ...

  3. [CSP-S模拟测试]:抛硬币(DP)

    题目背景 小$A$和小$B$是一对好朋友,他们经常一起愉快的玩耍.最近小$B$沉迷于**师手游,天天刷本,根本无心搞学习.但是小$B$已经入坑了几个月,却一次都没有抽到$SSR$,让他非常怀疑人生.勤 ...

  4. Chosen 的 optgroup 第一级单击的时候选择二级的全部

    相关环境 及 版本 Chosen (v1.6.2) https://harvesthq.github.io/chosen/ jQuery (v1.8.3) 官网 http://jquery.com/ ...

  5. python作业/练习/实战:2、注册、登录(文件读写操作)

    作业要求 1.实现注册功能输入:username.passowrd,cpassowrd最多可以输错3次3个都不能为空用户名长度最少6位, 最长20位,用户名不能重复密码长度最少8位,最长15位两次输入 ...

  6. 一个线上Java空指针问题的排查经过

    某天,运营反馈,某商品下单异常 1.原来是一个空指针报错 根据用户输入的下单关键信息搜索日志系统看到如下报错 stackTrace: "java.lang.NullPointerExcept ...

  7. emacs-w3m查看html帮助手册

    emacs-w3m查看html帮助手册 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #83949 ...

  8. 微服务-技术专区-链路追踪(pinpoint)-部署使用

    https://naver.github.io/pinpoint/ https://github.com/naver/pinpoint 背景 随着项目微服务的进行,微服务数量逐渐增加,服务间的调用也越 ...

  9. Mint安装配置Sublime Text3

    1.注册码: Sublime Text 3 3126 注册码 2.安装Package Control组件: 按Ctrl+`调出console(注:安装有QQ输入法的这个快捷键会有冲突的,输入法属性设置 ...

  10. 隐式激活Activity