BZOJ2819 Nim
做法。。。就不讲了,参见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相关推荐
- bzoj2819: Nim(博弈+树剖)
2819: Nim 题目:传送门 题解: 很久之前学博弈的时候看过的一道水题,其实算不上博弈吧... 直接套上一个裸的树剖啊,把路径上的点值全都xor(xor满足结合率所以就不管那么多随便搞啦) do ...
- BZOJ2819 Nim(DFS序)
题目:单点修改.树链查询. 可以直接用树链剖分做.. 修改是O(QlogN),查询是O(QlogNlogN),Q=N=500000: 听说会超时.. 这题也可以用DFS序来做. 先不看修改,单单查询: ...
- 2019.5.summary
2019.5.1 CF C. Prefix Sum Primes 感觉CF就是训练妳如何养成对题目强大的YY能力的QAQ 我们构造 如果只有一种,没辙,只能这样放 否则先放一个2,再放一个1 接下来把 ...
- 【BZOJ2819】Nim 树状数组+LCA
[BZOJ2819]Nim Description 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可 ...
- 【bzoj3150】 cqoi2013—新Nim游戏
www.lydsy.com/JudgeOnline/problem.php?id=3105 (题目链接) 题意 在第一个回合中,第一个游戏者可以直接拿走若干个整堆的火柴.可以一堆都不拿,但不可以全部拿 ...
- LeetCode实战:Nim 游戏
背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 You are pla ...
- 解题报告(一)E、(BZOJ4589)Hard Nim(博弈论 + FWT)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- POJ 1704 Georgia and Bob (Nim游戏变形)
题目:http://poj.org/problem?id=1704 思路:Nim游戏策略,做如下转换,如果N是偶数,则两两配对,将两个数之间的格子数(距离)看做成这一堆石头的数量. 如果N是奇数,则将 ...
- BZOJ 3105:[cqoi2013]新Nim游戏
BZOJ 3105:[cqoi2013]新Nim游戏 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3105 题目大意:在传统的Nim取石子 ...
最新文章
- 计算机操作员高级理论试题答案,计算机操作员高级理论试题答案1.doc
- Elasticsearch分布式一致性原理剖析(三)-Data篇
- 大数据学习笔记23:MR案例——采用Combiner做词频统计
- pytorch学习——构建多元线性回归的网络结构
- 基于skitter的轮播图炫酷效果,幻灯片的体验
- 计算机维修英语情景对话大全,实用英语短对话:修电脑
- 社交网络分析——信息传播模型(附带三个模型的python实现)
- 《暗时间(第2版)——思维改变生活》全书网址链接汇总
- markdown数学公式(MathJax)
- python高维数据降维_高维数据降维——主成分分析
- 微信小程序存在的风险_警惕,你的微信小程序可能面临着风险!
- 《神经科学:探索脑》学习笔记(第5章 突触传递)
- 光影在线电影网站制作笔记
- 找不到战网服务器ip地址,《冰封王座》战网服务器IP地址大全
- matlab偏微分图像修复,图像修复 Region filling and object removal by exemplar-based image inpainting matlab实现...
- excel中设置同一行中出现重复值时单元格突出显示
- 费城交响乐团将于5月16日至28日开启2019年中国巡演之旅
- 91Android万能驱动最新版,万能驱动助理(WanDrv) v7.18.313.1 官方正式版
- 直接计算法弱磁控制策略 额定转速以下采用最大转矩电流比控制
- FPGA 单端口RAM IP核使用 vivado仿真
热门文章
- python四大软件-Python实用模块(二十)Apscheduler
- python画椭圆-Python易学就会(五)turtle绘制椭圆与递归
- python3官方最新下载-Python3.9下载
- python编程语言是什么-Python是什么?可能是最受欢迎的编程语言
- r语言和python-PythonR语言-python和r相遇
- python web为什么不火-Python语言为什么这么火?老男孩Python入门培训
- 零基础自学python的建议-你是如何自学 Python 的?
- python免费课程讲解-Python快速入门免费课程
- python怎么识别拼音-python获取一组汉字拼音首字母的方法
- python版本选择-【小白学python】之一:版本选择