codeforces 812E Sagheer and Apple Tree(思维、nim博弈)
codeforces 812E Sagheer and Apple Tree
题意
一棵带点权有根树,保证所有叶子节点到根的距离同奇偶。
每次可以选择一个点,把它的点权删除x,它的某个儿子的点权增加x。点权中途中不能为负。如果选中的是叶子节点,则只删除它的点权。
两个人玩博弈,后手可以先交换两个点点权,问有多少种方法使得他必胜?
题解
观察一下可以发现,把和叶节点同奇偶的那些点拉出来,相比nim博弈多了一种操作:增加一些石子在某堆。不过本质不会有什么变化,因为如果A选择增加,B可以选择减少相同的,这样又回到了原来状态。
那么就是说如果这些点亦或起来是0,后手必胜。
代码
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define rep(i, a, b) for(int i=(a); i<(b); i++)
#define sz(a) (int)a.size()
#define de(a) cout << #a << " = " << a << endl
#define dd(a) cout << #a << " = " << a << " "
#define all(a) a.begin(), a.end()
#define endl "\n"
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
//---
const int N = 101010, M = N*100;
int n;
int a[N], cnt[2][M], dep[N];
vi g[N];
void dfs(int u, int fa) {
dep[u] = dep[fa] ^ 1;
++cnt[dep[u]][a[u]];
for(auto v : g[u]) dfs(v, u);
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(0);
///
cin >> n;
///read
rep(i, 1, n+1) cin >> a[i];
rep(v, 2, n+1) {
int u;
cin >> u;
g[u].pb(v);
}
///solve
dfs(1, 0);
ll ans = 0;
int sum = 0, res = 0, c;
rep(i, 1, n+1) if(sz(g[i])==0) {
c = dep[i];
break;
}
rep(i, 1, n+1) if(dep[i]==c) sum ^= a[i], ++res;
if(sum) {
rep(i, 1, n+1) if(dep[i]==c) {
int t = sum ^ a[i];
if(t<M) ans += cnt[c^1][t];
}
} else {
ans = 1ll*res*(res-1)/2;
res = n - res;
ans += 1ll*res*(res-1)/2;
rep(i, 1, M) ans += 1ll*cnt[0][i]*cnt[1][i];
}
cout << ans << endl;
return 0;
}
codeforces 812E Sagheer and Apple Tree(思维、nim博弈)的更多相关文章
- CodeForces 812E Sagheer and Apple Tree 树上nim
Sagheer and Apple Tree 题解: 先分析一下, 如果只看叶子层的话. 那么就相当于 经典的石子问题 nim 博弈了. 那我们看非叶子层. 看叶子层的父亲层. 我们可以发现, 如果从 ...
- Codeforces 812E Sagheer and Apple Tree ——(阶梯博弈)
之前在bc上做过一道类似的阶梯博弈的题目,那题是移动到根,这题是移动到叶子.换汤不换药,只要和终态不同奇偶的那些位置做nim即可.因此这题给出了一个条件:所有叶子深度的奇偶性相同.同时需要注意的是,上 ...
- Codeforces 812E Sagheer and Apple Tree
大致题意: 给你一颗树,这个树有下列特征:每个节点上有若干个苹果,且从根节点到任意叶子节点的路径长度奇偶性相同. 甲和乙玩(闲)游(得)戏(慌). 游戏过程中,甲乙轮流将任意一个节点的若干个苹果移向它 ...
- Atcoder #017 agc017 D.Game on Tree 树上NIM 博弈
LINK 题意:树上NIM的模板题,给出一颗树,现有操作删去端点不为根节点的边,其另一端节点都将被移除,不能取者为败 思路:一看就是个NIM博弈题,只是搬到树上进行,树上DFS进行异或 记得#014D ...
- codeforces 812 E. Sagheer and Apple Tree(树+尼姆博弈)
题目链接:http://codeforces.com/contest/812/problem/E 题意:有一颗苹果树,这个苹果树所有叶子节点的深度要不全是奇数,要不全是偶数,并且包括根在内的所有节点上 ...
- Codeforces 963B Destruction of a Tree 思维+dfs
题目大意: 给出一棵树,每次只能摧毁有偶数个度的节点,摧毁该节点后所有该节点连着的边都摧毁,判断一棵树能否被摧毁,若能,按顺序输出摧毁的点,如果有多种顺序,输出一种即可 基本思路: 1)我一开始自然而 ...
- Codeforces 348B - Apple Tree
348B - Apple Tree 我们设最后答案为 x , 我们我们就能用x表示出所有节点下面的苹果个数, 然后用叶子节点求lcm, 取最大的可行解. #include<bits/stdc++ ...
- POJ - 3321 Apple Tree (线段树 + 建树 + 思维转换)
id=10486" target="_blank" style="color:blue; text-decoration:none">POJ - ...
- cf202-div 1-B - Apple Tree:搜索,数论,树的遍历
http://codeforces.com/contest/348/problem/B B. Apple Tree time limit per test 2 seconds memory l ...
随机推荐
- FocusBI: 《DW/BI项目管理》之数据库表结构 (原创)
关注微信公众号:FocusBI 查看更多文章:加QQ群:808774277 获取学习资料和一起探讨问题. <商业智能教程>pdf下载地址 链接:https://pan.baidu.com/ ...
- ORA-04091: table xxx is mutating, trigger/function may not see it
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 Connected as tbcs SQL> SQL ...
- Angular 4+ 修仙之路
Angular 4.x 快速入门 Angular 4 快速入门 涉及 Angular 简介.环境搭建.插件表达式.自定义组件.表单模块.Http 模块等 Angular 4 基础教程 涉及 Angul ...
- WinForm-SuspendLayout、ResumeLayout、PerformLayou——转载
WinForm-SuspendLayout.ResumeLayout.PerformLayou——转载 https://www.cnblogs.com/si-shaohua/archive/2011/ ...
- WINFORM如何实现无聚焦框的Button按钮
当我们将一个button按钮设置如下属性时,总有一个聚焦框来困扰着我们 button1.FlatStyle = FlatStyle.Flat; 我们想要的效果是这样的: 但当使用了Tab切换焦点时 发 ...
- HTML页面格式
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- nohup磁盘打满问题排查与解决
使用nohup ... & 命令启动服务器后,磁盘满了,服务宕了,然后一步一步排查是哪个文件过大,最终定位到是nohup.out文件过大,占了40G, df -lh #磁盘容量命令 du -s ...
- 10、List、Set
List接口 List接口的特点 *A:List接口的特点: a:它是一个元素存取有序的集合. 例如,存元素的顺序是11.22.33.那么集合中,元素的存储就是按照11.22.33的顺序完成的). b ...
- php index.php修改之后未生效
php index.php修改之后未生效 PHP项目修改了index.php 里面的代码,提交服务器之后,代码功能未生效, 解决办法:重启fpm 命令如下: /etc/init.d/php5-fpm ...
- hadoop classpath 的作用
HADOOP_CLASSPATH 是设置要运行的类的路径.否则当你用hadoop classname [args]方式运行程序时会报错,说找不到要运行的类.用hadoop jar jar_name.j ...