题目链接: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的更多相关文章

  1. hdu 5996 dingyeye loves stone(博弈)

    题目链接:hdu 5996 dingyeye loves stone 题意: 给你一棵树,树的每一个节点有a[i]个石子,每个人可以将这个节点的石子移向它的父亲,如果没有合法操作,那么就算输,现在给你 ...

  2. 【hdu 5996】dingyeye loves stone

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s) ...

  3. HDU 5996 dingyeye loves stone [阶梯Nim]

    dingyeye喜欢和你玩石子游戏. dingyeye有一棵nn个节点的有根树,节点编号为00到n−1n−1,根为00号节点.游戏开始时,第ii个节点上有a[i]a[i]个石子.两位玩家轮流操作,每次 ...

  4. 【HDOJ5996】dingyeye loves stone(Nim游戏)

    题意:dingyeye喜欢和你玩石子游戏.dingyeye有一棵n个节点的有根树,节点编号为0到n−1,根为0号节点. 游戏开始时,第i个节点上有a[i]个石子.两位玩家轮流操作,每次操作玩家可以选择 ...

  5. HDU 5996 dingyeye loves stone ---BestCoder Round #90

    题目链接 设根节点的深度为0,将所有深度为奇数的节点的石子数目xor起来,则先手必胜当且仅当这个xor和不为0. 证明同阶梯博弈.对于偶深度的点上的石子,若对手移动它们,则可模仿操作:对于奇深度上的石 ...

  6. HDU 5996:dingyeye loves stone(阶梯博弈)

    http://acm.hdu.edu.cn/showproblem.php?pid=5996 题意:在一棵树上进行博弈,每次只能将当前的结点的石子放到父节点上,最后不能移动的输. 思路:比赛的时候想的 ...

  7. BestCoder Round #90

    有生以来第一场在COGS以外的地方打的比赛.挂成dog了. 主要是没有经验,加之代码能力过弱.还有最后的瞎hack三次,Too Young Too Simple...... 言归正传. (抄一发题解先 ...

  8. BestCoder Round #90 A+B题解!

    BestCoder Round #90 A  Kblack loves flag 题意有点迷不造思路很简单但不造怎么求随机数,纠结了一会后直接粘上题目所给的代码稍加修改A了. const int _K ...

  9. 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个石头) ...

随机推荐

  1. Event Logging 技术简介

    https://blog.csdn.net/xiliang_pan/article/details/41805023

  2. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 A,D

    A链接:https://www.nowcoder.com/acm/contest/163/A Fruit Ninja is a juicy action game enjoyed by million ...

  3. [Bzoj1767][Ceoi2009]harbingers (树上斜率优化)

    1767: [Ceoi2009]harbingers Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 451  Solved: 120[Submit][S ...

  4. 实时更新数据的jQuery图表插件DEMO演示

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 佳能 imageclass mf40120

    加粉2612A 加粉方式: 完全拆解安装:在技术部 自已研究 简单拆开,一分为二,倒粉,然后,加分:一些其他单位 外部加粉,拆粉口外盖:一些其他单位

  6. 手机没Root?你照样可以渗透路由器

    和Metasploit差不多,RouterSploit是一个强大的漏洞利用框架,用于快速识别和利用路由器中的普通漏洞,它还有个亮点,就是可以在绝大多数安卓设备上运行. 如果你想在电脑上运行,可以阅读这 ...

  7. C#:excel导入导出

    资源:excelService 服务 http://download.csdn.net/detail/istend/8060501 排列问题 导出时,数字和字符的排列格式默认不一样,数字靠右,字符靠左 ...

  8. 解决java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException

    解决: 工程目录.settings\org.eclipse.wst.common.project.facet.core.xml文件中jst.web的version降低到2.5 <?xml ver ...

  9. iOS远程推送原理

    远程推送 就是从远程server推送消息给client的通知.当然须要联网. 远程推送服务APNs (Apple Push NotificationServices) 为什么须要远程推送通知? 传统获 ...

  10. 选带傅里叶变换(zoom-fft)

    选带傅里叶变换的原理大家能够看书.大致的步骤为 移频 (将选带的中心频率移动到零频) 数字低通滤波器  (防止频率混叠) 又一次採样  (将採样的数据再次间隔採样,间隔的数据取决于分析的带宽,就是放大 ...