题目链接: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. Codeforces Round #297 (Div. 2) [ 折半 + 三进制状压 + map ]

    传送门 E. Anya and Cubes time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  2. Linux MTD (Memory Technology Device) subsystem analysis -For Atheros char device

    Linux MTD (Memory Technology Device) subsystem analysis For Atheros char device 读了Linux MTD 源代码分析 对这 ...

  3. Swift 了解

    本篇仅于个人小记,记录个人不熟悉的知识点儿.如若要了解更全,请前往如下网址:http://www.runoob.com/swift/swift-arrays.html 1.Swift 标记 分号:Sw ...

  4. CF821E(多次矩阵快速幂)

    题意: 冈伦从二维平面上(0,0)走到(k,0),(k<=1e18),每次有三个行动方向:右上一格.右方一格.右下一格,问一共有多少种走的方案 限制:每段x都有一个天花板,一共有n段天花板(n& ...

  5. HDU 5280 Senior&#39;s Array

    Senior's Array Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) T ...

  6. NoSQL之Memcached

    一.Memcached概念 Memcached是NoSQL产品之中的一个,是一个暂时性键值存储NoSQL数据库,过去被大量使用在互联网站点中,作为应用和数据库之间的缓存层,大大提高查询和訪问速度. M ...

  7. 基于空间直方图meanshift跟踪

    近期看了一篇文章<spatiograms versus histograms for region-based tracking>,在此把这篇文章的核心思想及算法推理进行整理. 空间直方图 ...

  8. js的几种循环语句

    //js种的循环语句 //while与do while的区别是while是满足条件后才执行 //do while是不管满不满足条件都会执行一次 //for 循环与while,do while相比循环结 ...

  9. PRD编写Axure内直接编辑

    流程&页面&交互&逻辑 功能点: 1,选项类 设置默认值. 2,输入文本类 设置最多最少字符数. 3,功能按钮,如提交.发布. 判断敏感词,如果有,则点击发布的时候,悬浮提醒“ ...

  10. SQL Server 存储过程具体解释

    SQL Server 存储过程具体解释 存储过程的优缺点 ◆长处: 运行速度更快. 存储过程仅仅在创造时进行编译,而一般SQL语句每运行一次就编译一次,所以使用存储过程运行速度更快. 存储过程用于处理 ...