HDU5996:dingyeye loves stone
题目链接:dingyeye loves stone
题意:给出一棵树,树上的每个节点都有石子若干,
两人博弈,每次操作都可以把任意节点的任意石子数转移到它的父亲节点,
若无法操作则输,给出树上的节点及石子数,问先手是否能赢
分析:“阶梯博弈”,若深度为偶数的节点,对方移多少石子,我们就移多少。故偶数节点可忽略不计
接下来只要异或深度为奇数的节点石子数即可
感想:深度不会求,dfs不会写,我真菜
第一种方法.
记录每个节点的子节点,dfs遍历所有节点,若深度为奇则异或
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
using namespace std; typedef long long ll;
int t,n,x,value[],dep[]; ll ans; vector<int>g[];
void dfs(int i,int d)
{
if(d) ans^=value[i];
for(int j=;j<g[i].size();++j) dfs(g[i][j],d^);
} int main()
{
for(scanf("%d",&t);t--;)
{
scanf("%d",&n);
for(int i=;i<n;++i) g[i].clear();
for(int i=;i<n;++i)
{
scanf("%d",&x);
g[x].push_back(i);
}
//memset(censhu,0,sizeof(censhu));
//fa[0]=0;
for(int i=;i<n;++i) scanf("%d",value+i);ans=;
dfs(,);
if(ans) puts("win");else puts("lose");
}
return ;
} /*
int main()
{
for(scanf("%d",&t);t--;)
{
scanf("%d",&n);
memset(dep,0,sizeof(dep));
for(int i=1;i<n;++i)
{
scanf("%d",&x);
dep[i]=dep[x]+1;
}
//memset(censhu,0,sizeof(censhu));
//fa[0]=0;
ans=0;
for(int i=0;i<n;++i) {scanf("%d",value+i);if(dep[i]&1) ans^=value[i];}
if(ans) puts("win");else puts("lose");
}
return 0;
}
*/
第二种方法.
读入每个节点的父亲时,记录深度,题目保证父亲出现在子节点前
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
using namespace std; typedef long long ll;
int t,n,x,value[],dep[]; ll ans;
/*
vector<int>g[100010];
void dfs(int i,int d)
{
if(d) ans^=value[i];
for(int j=0;j<g[i].size();++j) dfs(g[i][j],d^1);
} int main()
{
for(scanf("%d",&t);t--;)
{
scanf("%d",&n);
for(int i=0;i<n;++i) g[i].clear();
for(int i=1;i<n;++i)
{
scanf("%d",&x);
g[x].push_back(i);
}
//memset(censhu,0,sizeof(censhu));
//fa[0]=0;
for(int i=0;i<n;++i) scanf("%d",value+i);ans=0;
dfs(0,0);
if(ans) puts("win");else puts("lose");
}
return 0;
}
*/ int main()
{
for(scanf("%d",&t);t--;)
{
scanf("%d",&n);
memset(dep,,sizeof(dep));
for(int i=;i<n;++i)
{
scanf("%d",&x);
dep[i]=dep[x]+;
}
//memset(censhu,0,sizeof(censhu));
//fa[0]=0;
ans=;
for(int i=;i<n;++i) {scanf("%d",value+i);if(dep[i]&) ans^=value[i];}
if(ans) puts("win");else puts("lose");
}
return ;
}
HDU5996:dingyeye loves stone的更多相关文章
- hdu 5996 dingyeye loves stone(博弈)
题目链接:hdu 5996 dingyeye loves stone 题意: 给你一棵树,树的每一个节点有a[i]个石子,每个人可以将这个节点的石子移向它的父亲,如果没有合法操作,那么就算输,现在给你 ...
- 【hdu 5996】dingyeye loves stone
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s) ...
- HDU 5996 dingyeye loves stone [阶梯Nim]
dingyeye喜欢和你玩石子游戏. dingyeye有一棵nn个节点的有根树,节点编号为00到n−1n−1,根为00号节点.游戏开始时,第ii个节点上有a[i]a[i]个石子.两位玩家轮流操作,每次 ...
- 【HDOJ5996】dingyeye loves stone(Nim游戏)
题意:dingyeye喜欢和你玩石子游戏.dingyeye有一棵n个节点的有根树,节点编号为0到n−1,根为0号节点. 游戏开始时,第i个节点上有a[i]个石子.两位玩家轮流操作,每次操作玩家可以选择 ...
- HDU 5996 dingyeye loves stone ---BestCoder Round #90
题目链接 设根节点的深度为0,将所有深度为奇数的节点的石子数目xor起来,则先手必胜当且仅当这个xor和不为0. 证明同阶梯博弈.对于偶深度的点上的石子,若对手移动它们,则可模仿操作:对于奇深度上的石 ...
- HDU 5996:dingyeye loves stone(阶梯博弈)
http://acm.hdu.edu.cn/showproblem.php?pid=5996 题意:在一棵树上进行博弈,每次只能将当前的结点的石子放到父节点上,最后不能移动的输. 思路:比赛的时候想的 ...
- BestCoder Round #90
有生以来第一场在COGS以外的地方打的比赛.挂成dog了. 主要是没有经验,加之代码能力过弱.还有最后的瞎hack三次,Too Young Too Simple...... 言归正传. (抄一发题解先 ...
- BestCoder Round #90 A+B题解!
BestCoder Round #90 A Kblack loves flag 题意有点迷不造思路很简单但不造怎么求随机数,纠结了一会后直接粘上题目所给的代码稍加修改A了. const int _K ...
- HDOJ 4248 A Famous Stone Collector DP
DP: dp[i][j]前i堆放j序列长度有多少行法, dp[i][j]=dp[i-1][j] (不用第i堆), dp[i][j]+=dp[i-1][j-k]*C[j][k] (用第i堆的k个石头) ...
随机推荐
- windows7 下安装使用memcached(二)
Memcached 安装使用 本地环境:Windows7 64位web环境:wamp集成环境,php版本:PHP Version 7.1.17 学习参考网站: RUNOOB.COM官网 http:/ ...
- poj3905 2sat!
这次已经不是2sat的问题了,相信2sat已经不是问题了,最后一题2sat,竟然跪在输入上! 千万注意scanf(%c)!读入!!!!有空格也读啊!!!读入+ -一定要用字符读啊??笨死算了!被人水死 ...
- ASP.NET Core小技巧
设定开发环境为开发模式,呈现具体错误内容 dotnet run启动时,会在环境变量中查找ASPNETCORE_ENVIRONMENT变量的值,如果没有,则默认会当做Production来处理,隐藏错误 ...
- lemon oa前端页面——由user-base-list谈项目组织
content user-base-list.jsp中指定<%pageContext.setAttribute("currentHeader", "user&quo ...
- .NET作品集:基于svn 的.net 持续集成工具
作品背景 这个.net 持续集成作品还是在2014年的时候从事.net 软件项目开发的时候做的,当时部门还用着vs2008用vb.net做项目(现在也是),项目代码极混乱,版本工具用的vss,而且用的 ...
- 【APUE】文件I/O
Linux的内核将所有外部设备都可以看做一个文件来操作.那么我们对与外部设备的操作都可以看做对文件进行操作.我们对一个文件的读写,都通过调用内核提供的系统调用:内核给我们返回一个file descri ...
- hdu 5303 Delicious Apples
这道题贪心 背包 假设在走半圆之内能够装满,那么一定优于绕一圈回到起点.所以我们从中点将这个分开,那么对于每一个区间由于苹果数非常少,所以能够利用pos[x]数组记录每一个苹果所在的苹果树位置,然后将 ...
- Android签名机制之---签名验证过程具体解释
一.前言 今天是元旦,也是Single Dog的嚎叫之日,仅仅能写博客来祛除寂寞了,今天我们继续来看一下Android中的签名机制的姊妹篇:Android中是怎样验证一个Apk的签名. 在前一篇文章中 ...
- 像感冒一样的contains error
转自 http://blog.csdn.net/zhufuing/article/details/8135270 Android开发中的问题总是多种多样,今天我来总结一个浪费了我一个 ...
- Android碎纸机效果
1.总体思想 活用padding和margin 2.实现过程 public class PopupShredderView extends FrameLayout{ public PopupShred ...