做法。。。就不讲了,参见hzwer的blog好了

我们发现只要维护树上点到根的xor值就可以了,于是先搞个dfs序,然后用树状数组维护即可。

反正各种调不出。。。各种WA

后来发现又是LCA的姿势不对= =,今天不是刚写过noip题嘛T T

蒟蒻还是滚去挖矿算了、、、

  1 /**************************************************************
  2     Problem: 2819
  3     User: rausen
  4     Language: C++
  5     Result: Accepted
  6     Time:10240 ms
  7     Memory:76648 kb
  8 ****************************************************************/
  9
 10 #include <cstdio>
 11 #include <algorithm>
 12
 13 #define lowbit(x) x & -x
 14 using namespace std;
 15 const int N = 500005;
 16
 17 struct edge {
 18     int next, to;
 19     edge() {}
 20     edge(int _n, int _t) : next(_n), to(_t) {}
 21 } e[N << 1];
 22
 23 struct tree_node {
 24     int v, dep, st, ed;
 25     int fa[19];
 26 } tr[N];
 27
 28 int n;
 29 int tot, first[N];
 30 int cnt_seq, BIT[N];
 31
 32 inline int read() {
 33     int x = 0;
 34     char ch = getchar();
 35     while (ch < '0' || '9' < ch)
 36         ch = getchar();
 37     while ('0' <= ch && ch <= '9') {
 38         x = x * 10 + ch - '0';
 39         ch = getchar();
 40     }
 41     return x;
 42 }
 43
 44 void XOR(int x, int v) {
 45     while (x <= n)
 46         BIT[x] ^= v, x += lowbit(x);
 47 }
 48
 49 int query(int x) {
 50     int res = 0;
 51     while (x)
 52         res ^= BIT[x], x -= lowbit(x);
 53     return res;
 54 }
 55
 56 inline void Add_Edges(int x, int y) {
 57     e[++tot] = edge(first[x], y), first[x] = tot;
 58     e[++tot] = edge(first[y], x), first[y] = tot;
 59 }
 60
 61 void dfs(int p) {
 62     int x, y;
 63     for (x = 1; x <= 18; ++x)
 64         tr[p].fa[x] = tr[tr[p].fa[x - 1]].fa[x - 1];
 65     tr[p].st = ++cnt_seq;
 66     for (x = first[p]; x; x = e[x].next)
 67         if ((y = e[x].to) != tr[p].fa[0]) {
 68             tr[y].fa[0] = p, tr[y].dep = tr[p].dep + 1;
 69             dfs(y);
 70         }
 71     tr[p].ed = cnt_seq;
 72     XOR(tr[p].st, tr[p].v), XOR(tr[p].ed + 1, tr[p].v);
 73 }
 74
 75 int lca(int x, int y) {
 76     int i;
 77     if (tr[x].dep < tr[y].dep) swap(x, y);
 78     for (i = 18; ~i; --i)
 79         if (tr[tr[x].fa[i]].dep >= tr[y].dep)
 80             x = tr[x].fa[i];
 81     if (x == y) return x;
 82     for (i = 18; ~i; --i)
 83         if (tr[x].fa[i] != tr[y].fa[i])
 84             x = tr[x].fa[i], y = tr[y].fa[i];
 85     return tr[x].fa[0];
 86 }
 87
 88 int main() {
 89     int i, x, y, LCA, Q;
 90     char ch;
 91     n = read();
 92     for (i = 1; i <= n; ++i)
 93         tr[i].v = read();
 94     for (i = 1; i < n; ++i)
 95         Add_Edges(read(), read());
 96     tr[1].dep = 1;
 97     dfs(1);
 98     Q = read();
 99     while (Q--) {
100         ch = getchar();
101         while (ch != 'Q' && ch != 'C') ch = getchar();
102         x = read(), y = read();
103         if (ch == 'Q')
104             puts(query(tr[x].st) ^ query(tr[y].st) ^ tr[lca(x, y)].v ? "Yes" : "No");
105         else {
106             XOR(tr[x].st, tr[x].v), XOR(tr[x].ed + 1, tr[x].v);
107             tr[x].v = y;
108             XOR(tr[x].st, tr[x].v), XOR(tr[x].ed + 1, tr[x].v);
109         }
110     }
111     return 0;
112 }

View Code

转载于:https://www.cnblogs.com/rausen/p/4162079.html

BZOJ2819 Nim相关推荐

  1. bzoj2819: Nim(博弈+树剖)

    2819: Nim 题目:传送门 题解: 很久之前学博弈的时候看过的一道水题,其实算不上博弈吧... 直接套上一个裸的树剖啊,把路径上的点值全都xor(xor满足结合率所以就不管那么多随便搞啦) do ...

  2. BZOJ2819 Nim(DFS序)

    题目:单点修改.树链查询. 可以直接用树链剖分做.. 修改是O(QlogN),查询是O(QlogNlogN),Q=N=500000: 听说会超时.. 这题也可以用DFS序来做. 先不看修改,单单查询: ...

  3. 2019.5.summary

    2019.5.1 CF C. Prefix Sum Primes 感觉CF就是训练妳如何养成对题目强大的YY能力的QAQ 我们构造 如果只有一种,没辙,只能这样放 否则先放一个2,再放一个1 接下来把 ...

  4. 【BZOJ2819】Nim 树状数组+LCA

    [BZOJ2819]Nim Description 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可 ...

  5. 【bzoj3150】 cqoi2013—新Nim游戏

    www.lydsy.com/JudgeOnline/problem.php?id=3105 (题目链接) 题意 在第一个回合中,第一个游戏者可以直接拿走若干个整堆的火柴.可以一堆都不拿,但不可以全部拿 ...

  6. LeetCode实战:Nim 游戏

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 You are pla ...

  7. 解题报告(一)E、(BZOJ4589)Hard Nim(博弈论 + FWT)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  8. POJ 1704 Georgia and Bob (Nim游戏变形)

    题目:http://poj.org/problem?id=1704 思路:Nim游戏策略,做如下转换,如果N是偶数,则两两配对,将两个数之间的格子数(距离)看做成这一堆石头的数量. 如果N是奇数,则将 ...

  9. BZOJ 3105:[cqoi2013]新Nim游戏

    BZOJ 3105:[cqoi2013]新Nim游戏 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3105 题目大意:在传统的Nim取石子 ...

最新文章

  1. 计算机操作员高级理论试题答案,计算机操作员高级理论试题答案1.doc
  2. Elasticsearch分布式一致性原理剖析(三)-Data篇
  3. 大数据学习笔记23:MR案例——采用Combiner做词频统计
  4. pytorch学习——构建多元线性回归的网络结构
  5. 基于skitter的轮播图炫酷效果,幻灯片的体验
  6. 计算机维修英语情景对话大全,实用英语短对话:修电脑
  7. 社交网络分析——信息传播模型(附带三个模型的python实现)
  8. 《暗时间(第2版)——思维改变生活》全书网址链接汇总
  9. markdown数学公式(MathJax)
  10. python高维数据降维_高维数据降维——主成分分析
  11. 微信小程序存在的风险_警惕,你的微信小程序可能面临着风险!
  12. 《神经科学:探索脑》学习笔记(第5章 突触传递)
  13. 光影在线电影网站制作笔记
  14. 找不到战网服务器ip地址,《冰封王座》战网服务器IP地址大全
  15. matlab偏微分图像修复,图像修复 Region filling and object removal by exemplar-based image inpainting matlab实现...
  16. excel中设置同一行中出现重复值时单元格突出显示
  17. 费城交响乐团将于5月16日至28日开启2019年中国巡演之旅
  18. 91Android万能驱动最新版,万能驱动助理(WanDrv) v7.18.313.1 官方正式版
  19. 直接计算法弱磁控制策略 额定转速以下采用最大转矩电流比控制
  20. FPGA 单端口RAM IP核使用 vivado仿真

热门文章

  1. python四大软件-Python实用模块(二十)Apscheduler
  2. python画椭圆-Python易学就会(五)turtle绘制椭圆与递归
  3. python3官方最新下载-Python3.9下载
  4. python编程语言是什么-Python是什么?可能是最受欢迎的编程语言
  5. r语言和python-PythonR语言-python和r相遇
  6. python web为什么不火-Python语言为什么这么火?老男孩Python入门培训
  7. 零基础自学python的建议-你是如何自学 Python 的?
  8. python免费课程讲解-Python快速入门免费课程
  9. python怎么识别拼音-python获取一组汉字拼音首字母的方法
  10. python版本选择-【小白学python】之一:版本选择