bzoj 3729

来源:互联网 发布:偶像活动美月卡片淘宝 编辑:程序博客网 时间:2024/05/17 08:03

题意:
在一棵树上博弈,每次能将不超L个的石头移到父亲。
支持三种操作:
1.询问u为子树的博弈情况
2.修改某个点的值权
3.插入一个新点

题解:
博弈部分
如果直接将u为第0层,就是奇数层的数值才是有用的。
因为不超过L个,后手可以保证每次两人取得(L+1),所以sg值为模(L+1)。
那每次询问就是对整棵树奇偶分层,和当前点奇偶性不同的sg值XOR和。

用splay维护dfs序,每个点拆成两个。
在spaly上用两个点可以包住所有子树内的点。
每个节点分别维护子树内奇数层和偶数层的sg值XOR和。
可以规定:右端点没有权,权在左端点上。

代码:
http://paste.ubuntu.com/24233614/

小结:
这连串数据结构题,是liaoliao给的题目中个人感觉很有启发性的。
在做的过程中,暴露一些问题:
没想清楚就开打。。。这。。。
个人性格决定一定要想请每个细节才打。
打到一半发现忽略的细节一定放下重新想。
少浪费时间想打指针还是数组,无聊。。。
打代码不能急躁,按着节奏来。
不要乱对拍调试,先冷静看看代码。

可以过去一段每日10k+的日子了?(笑)

0 0
原创粉丝点击