记录编号 123968 评测结果 AAAAAAAAAA
题目名称 [CEOI 1999] 奇偶性游戏 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 0.013 s
提交时间 2014-10-01 21:05:57 内存使用 0.46 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<vector>
  6. #include<map>
  7. using namespace std;
  8. const int SIZEN=10010;
  9. int L,N;
  10. class REQ{
  11. public:
  12. int a,b,w;//[a,b],答案w
  13. }R[SIZEN];
  14. int ufs[SIZEN]={0},flen[SIZEN]={0};
  15. vector<int> X;
  16. map<int,int> MP;
  17. int grand(int x,int &k){
  18. if(ufs[x]==-1){k=0;return x;}
  19. ufs[x]=grand(ufs[x],k);
  20. k=(flen[x]^=k);
  21. return ufs[x];
  22. }
  23. void work(void){
  24. int ga,gb,ka,kb;
  25. for(int i=1;i<=N;i++){
  26. ga=grand(R[i].a,ka);
  27. gb=grand(R[i].b,kb);
  28. if(ga!=gb){
  29. ufs[ga]=gb;
  30. flen[ga]=R[i].w^ka^kb;
  31. }
  32. else{
  33. if(ka^kb!=R[i].w){
  34. printf("%d\n",i-1);
  35. return;
  36. }
  37. }
  38. }
  39. printf("%d\n",N);
  40. }
  41. void read(void){
  42. scanf("%d%d",&L,&N);
  43. char ch[10];
  44. for(int i=1;i<=N;i++){
  45. scanf("%d%d",&R[i].a,&R[i].b);
  46. scanf("%s",ch);
  47. if(ch[0]=='e') R[i].w=0;
  48. else R[i].w=1;
  49. X.push_back(R[i].a-1);
  50. X.push_back(R[i].b);
  51. }
  52. sort(X.begin(),X.end());
  53. int tot=0;
  54. for(int i=0;i<X.size();i++)
  55. if(!i||X[i]!=X[i-1]) MP[X[i]]=++tot;
  56. for(int i=1;i<=N;i++){
  57. R[i].a=MP[R[i].a-1];
  58. R[i].b=MP[R[i].b];
  59. }
  60. }
  61. int main(){
  62. freopen("parity.in","r",stdin);
  63. freopen("parity.out","w",stdout);
  64. memset(ufs,-1,sizeof(ufs));
  65. read();
  66. work();
  67. return 0;
  68. }