hdu5996 阶梯nim博弈

来源:互联网 发布:下载360软件下载 编辑:程序博客网 时间:2024/05/18 02:58

第一次接触到阶梯nim博弈 看了这篇博客,讲得比较清楚:http://blog.csdn.net/kk303/article/details/6692506

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5996

大意就是给一颗树 树的节点上放有石子,每次只能把石子往父节点移动一下,规定不能移动者输。

看了阶梯博弈后大概就能懂这题的意思了,直接把深度为奇数的节点异或起来就可以了

#include<iostream>#include<cstdio>#include<map>#include<cstring>#include<string>#include<stack>#include<queue>#include<algorithm>#include<cmath>#include<vector>using namespace std;#define LL long longint main(){int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);int d[100005];d[0] = 0;for(int i = 1;i<n;i++){int temp;scanf("%d",&temp);d[i] = d[temp]+1;}int ans = 0;for(int i = 0;i<n;i++){int temp;scanf("%d",&temp);if(i==0)continue;if(d[i]%2==1){ans ^= temp;}}if(ans!=0){printf("win\n");}else{printf("lose\n");} } return 0;}


0 0