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个石头) ...
随机推荐
- C++内存分配方式(——选自:C++内存管理技术内幕)
C++内存分配的区: 1.栈:程序运行时分配的,局部变量,以及传入的参数等存储的地方,在程序结束的时候会回收 2.堆:new分配,由delete释放 3.自由存储区:malloc分配 4.全局/静态存 ...
- Java课堂测试--实现ATM的基本操作体会
9月20的周四的Java课堂第一节课上就是有关于实现ATM的考试内容,在实现的过程中我了解到自己本身还是有很多的不足之处,例如在实现工程方面的相似性上面还有些许就的欠缺,再者就是回宿舍拿电源的原因导致 ...
- httpclient失败重连机制
HttpClient 底层会默认超时自动重发3次,DefaultHttpRequestRetryHandler源码 /** * Create the request retry handler ...
- GreenDao数据库的升级
应用使用了GreenDao数据库,在版本升级的时候需要更改dao的字段,新增.修改.删除字段操作,如果直接删除原来的表的话那用户原来的一些数据就没有了,所以在更新数据库的时候需要做一次封装,把原来的数 ...
- 如何在不允许联网的环境下使用Maven开发
前言:Maven的运行机理是:Maven核心组件先去本地的.m2目录下的库中去寻找依赖或者插件,如果本地库里没有,如果配置了私服则上私服去下载依赖或者插件,如果私服上没有,则上中央服务等Maven服务 ...
- IOS开发 ios7适配
ios7控制器试图默认为全屏显示,导航栏的不同设置会产生不同的效果. 首先判断系统的的版本,区别: if (floor(NSFoundationVersionNumber) <= NSFound ...
- Meteor在手机上运行
在本章中,我们将学习如何在Android设备上运行你的应用程序.最近Meteor刚刚添加此功能适用于Windows操作系统,所以我们需要更新 Meteor 应用到 1.3测试版. 注 在写的时候本教程 ...
- Android NFC近场通信02----读写卡的准备工作
Android NFC近场通信02----读写卡的准备工作 因为公司接了一个听上去感觉比較NB的项目.给某油田做派工系统 .并由小女子负责Androi ...
- 分享一个纯css制作的动画化,在网页(手机)载入等的时候能够引用!
CSS代码例如以下: /* Custom Stylesheet */ body, html { margin: 0; -webkit-font-smoothing: antialiased; back ...
- MySQL多实例配置(一)
MySQL数据库的集中化运维,能够通过在一台MySQL数据库服务器上,部署多个MySQL实例.该功能是通过mysqld_multi来实现.mysqld_multi用于管理多个mysqld的服务进程,这 ...