2819

思路:

  手工栈;

代码:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define maxn 500005
  4. #define maxm maxn<<1
  5. #define maxtree maxn<<2
  6. int head[maxn],V[maxm],E[maxm],f[maxn],m,n;
  7. int deep[maxn],size[maxn],lar[maxn],stanow[maxn],statype[maxn];
  8. int stafa[maxn],stai[maxn],top[maxn],cnt,id[maxn],stachain[maxn];
  9. int dis[maxn],dis_[maxn],tree[maxn];
  10. inline void in(int &now)
  11. {
  12. char Cget=getchar();now=;
  13. while(Cget>''||Cget<'') Cget=getchar();
  14. while(Cget>=''&&Cget<='')
  15. {
  16. now=now*+Cget-'';
  17. Cget=getchar();
  18. }
  19. }
  20. /*void dfs(int now,int fa)
  21. {
  22. size[now]=1,deep[now]=deep[fa]+1,f[now]=fa;
  23. for(int i=head[now];i;i=E[i])
  24. {
  25. if(V[i]==fa) continue;
  26. dfs(V[i],now),size[now]+=size[V[i]];
  27. if(size[V[i]]>size[lar[now]]) lar[now]=V[i];
  28. }
  29. }*/
  30. void dfs1()
  31. {
  32. int now=;stanow[now]=,stafa[now]=;
  33. flag1:
  34. deep[stanow[now]]=deep[stafa[now]]+,size[stanow[now]]=,f[stanow[now]]=stafa[now];
  35. for(stai[now]=head[stanow[now]];stai[now];stai[now]=E[stai[now]])
  36. {
  37. if(V[stai[now]]==stafa[now]) continue;
  38. now++,stanow[now]=V[stai[now-]],stafa[now]=stanow[now-];
  39. goto flag1;
  40. flag2:
  41. size[stanow[now]]+=size[V[stai[now]]];
  42. if(size[V[stai[now]]]>size[lar[stanow[now]]]) lar[stanow[now]]=V[stai[now]];
  43. }
  44. if(now==) return;
  45. else
  46. {
  47. now--;
  48. goto flag2;
  49. }
  50. }
  51. /*
  52. void dfs2(int now,int chain)
  53. {
  54. top[now]=chain,id[now]=++cnt;
  55. if(lar[now]) dfs2(lar[now],now);
  56. for(int i=head[now];i;i=E[i])
  57. {
  58. if(V[i]==f[now]||V[i]==lar[now]) continue;
  59. dfs2(V[i],V[i]);
  60. }
  61. }
  62. */
  63. void dfs2()
  64. {
  65. int now=;stanow[now]=,stachain[now]=;
  66. flag1:
  67. top[stanow[now]]=stachain[now],id[stanow[now]]=++cnt;
  68. if(lar[stanow[now]])
  69. {
  70. now++,stanow[now]=lar[stanow[now-]],stachain[now]=stachain[now-],statype[now]=;
  71. goto flag1;
  72. flag2:;
  73. }
  74. for(stai[now]=head[stanow[now]];stai[now];stai[now]=E[stai[now]])
  75. {
  76. if(V[stai[now]]==f[stanow[now]]||V[stai[now]]==lar[stanow[now]]) continue;
  77. now++,stanow[now]=V[stai[now-]],stachain[now]=V[stai[now-]],statype[now]=;
  78. goto flag1;
  79. flag3:;
  80. }
  81. if(now==) return;
  82. else
  83. {
  84. now--;
  85. if(statype[now+]==) goto flag2;
  86. else goto flag3;
  87. }
  88. }
  89. #define lowbit(x) x&(-x)
  90. int change(int to,int x)
  91. {
  92. int d=to,tmp=x^dis_[to];
  93. while(d<=n) tree[d]^=tmp,d+=lowbit(d);
  94. dis_[to]=x;
  95. }
  96. int Query(int l,int r)
  97. {
  98. int res=;l--;
  99. while(r) res^=tree[r],r-=lowbit(r);
  100. while(l) res^=tree[l],l-=lowbit(l);
  101. return res;
  102. }
  103. int query(int x,int y)
  104. {
  105. int res=;
  106. while(top[x]!=top[y])
  107. if(deep[top[x]]>deep[top[y]]) res^=Query(id[top[x]],id[x]),x=f[top[x]];
  108. else res^=Query(id[top[y]],id[y]),y=f[top[y]];
  109. if(deep[x]>deep[y]) swap(x,y);
  110. return res^Query(id[x],id[y]);
  111. }
  112. int main()
  113. {
  114. in(n);int u,v;
  115. for(int i=;i<=n;i++) in(dis[i]);
  116. for(int i=;i<n;i++)
  117. {
  118. in(u),in(v);
  119. E[++cnt]=head[u],V[cnt]=v,head[u]=cnt;
  120. E[++cnt]=head[v],V[cnt]=u,head[v]=cnt;
  121. }
  122. cnt=,dfs1(),dfs2();
  123. for(int i=;i<=n;i++) change(id[i],dis[i]);
  124. in(m);char op[];
  125. for(int i=;i<=m;i++)
  126. {
  127. scanf("%s",op),in(u),in(v);
  128. if(op[]=='C') change(id[u],v);
  129. else if(query(u,v)) printf("Yes\n");
  130. else printf("No\n");
  131. }
  132. return ;
  133. }

bzoj 2819的更多相关文章

  1. [BZOJ - 2819] Nim 【树链剖分 / DFS序】

    题目链接: BZOJ - 2819 题目分析 我们知道,单纯的 Nim 的必胜状态是,各堆石子的数量异或和不为 0 .那么这道题其实就是要求求出树上的两点之间的路径的异或和.要求支持单点修改. 方法一 ...

  2. [BZOJ 2819]NIM(dfs序维护树上xor值)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2819 分析: 树上的nim游戏,关键就是要判断树上的一条链的异或值是否为0 这个题目有 ...

  3. bzoj 2819 Nim(BIT,dfs序,LCA)

    2819: Nim Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1596  Solved: 597[Submit][Status][Discuss] ...

  4. BZOJ 2819: Nim( nim + DFS序 + 树状数组 + LCA )

    虽然vfleaking好像想卡DFS...但我还是用DFS过了... 路径上的石堆异或和=0就是必败, 否则就是必胜(nim游戏). 这样就变成一个经典问题了, 用DFS序+BIT+LCA就可以在O( ...

  5. bzoj 2819(DFS序+树状数组+博弈+lca)

    2819: Nim Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 2045  Solved: 795[Submit][Status][Discuss] ...

  6. [BZOJ 2819]Nim

    最近都忙的没空写题解了喵- 看到 1= 终于是保住了也算是一个小小的安慰吧 555…… 湖北省队互测题,据说会爆栈,但 Linux 下 栈空间=内存=128M 真的吃不下? 反正我是写了个人工栈- 这 ...

  7. BZOJ 2819: Nim dfs序维护树状数组,倍增

    1.随机选两个堆v,u,询问若在v到u间的路径上的石子堆中玩Nim游戏,是否有必胜策略,如果有,vfleaking将会考虑将这些石子堆作为初始局面之一,用来坑玩家.2.把堆v中的石子数变为k. 分析: ...

  8. bzoj 2819 博弈论

    我们可以把 n为偶数的时候,n*n的棋盘看成若干个不相交的2*1的格子,那么对于每个2*1的格子,如果先手选了其中的一个,另一个人都可以选另一个,所以最后使先手没有可以选的格子,先手必败(这里的先手并 ...

  9. BZOJ 2819 Nim 树链剖分+树状数组

    这题真没什么意思. 不过就是将普通的求Min,Max,求和等东西换成Xor,偏偏Xor还有很多性质. 算是刷道水题吧. #include<iostream> #include<cst ...

随机推荐

  1. python 调用aiohttp

    1. aiohttp安装   pip3 install aiohttp 1.1. 基本请求用法 async with aiohttp.get('https://github.com') as r: a ...

  2. day13 类的补充

    访问修饰符                          同包                          不同包 本类         子类         非子类        子类   ...

  3. 关于JSON的解析方式

    借鉴:站在巨人的肩膀上 一.json-lib json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包,在Json.org网站上,Java可以使用 ...

  4. 关于connect by 误区讲解,纯属个人心得和经验,有图有文字

    本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处. http://www.cnblogs.com/king-xg/p/6927541.html 如果觉得对您有帮 ...

  5. 贪心问题:区间覆盖 POJ 2376 Cleaning Shift

    题目:http://poj.org/problem?id=2376 题意:就是 N 个区间, 输入 N 个区间的 [begin, end],求能用它们覆盖区间[1,T]的最小组合. 题解: 1. 首先 ...

  6. SpringCloud (十) Hystrix Dashboard单体监控、集群监控、与消息代理结合

    一.前言 Dashboard又称为仪表盘,是用来监控项目的执行情况的,本文旨在Dashboard的使用 分别为单体监控.集群监控.与消息代理结合. 代码请戳我的github 二.快速入门 新建一个Sp ...

  7. [转载]用NodeJS打造你的静态文件服务器

    http://www.open-open.com/bbs/view/1321344823593 本文是我对V5Node项目的总结,该项目的特性包括: 项目大多数的文件都是属于静态文件,只有数据部分存在 ...

  8. [整理]C语言函数说明和定义

    函数的一般形式是:type-specifier function_name(parameter list) parameter declarations{   body of the function ...

  9. soj1036. Crypto Columns

    1036. Crypto Columns Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description The columnar en ...

  10. [hadoop]hadoop api 新版本与旧版本的差别

    突然现在对以后的职业方向有些迷茫,不知道去干什么,现在有一些语言基础,相对而言好的一些有Java和C,选来选去不知道该选择哪个方向,爬了好多网页后,觉得自己应该从java开始出发,之前有点心不在焉,不 ...