这两三天貌似没怎么写blog 来补点
劲啊 这道题 我的数据结构真心菜。。

首先对于子树来搞 显然就是用dfs序 由于动态加点 我们用splay

考虑博弈 距离这层为偶数层的可以不管 奇数层的就像简单NIM游戏一样取 当然了 每次只能取小于等于L的 直接MOD (L+1) 理由很简单 你取多少我都能筹够L+1和你抵消(orz 噶爷)*

所以就维护一下 奇偶数层的xor和
开点不用说了吧。。什么区间左端点作根右端点作右孩子

对了 这道题描述有点不对啊 最大那个数据 点数是超过了5*10^4的。。
所以你要开大一点。。一点就好

#include<bits/stdc++.h>
using namespace std;
const int N=60010;
inline int read()
{char ch=getchar(); int x=0,f=1;while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0'; ch=getchar();}return x*f;
}
struct edge{int y,next;}e[N];int len,first[N];
void ins(int x,int y){e[++len]=(edge){y,first[x]},first[x]=len;}
struct node{int son[2],s[2],d,f,p;}t[N<<1];
int tot,rt,a[N],dep[N<<1],al[N],ar[N],z[N];
void upd(int x)
{int lc=t[x].son[0],rc=t[x].son[1];t[x].s[0]=t[lc].s[0]^t[rc].s[0],t[x].s[1]=t[lc].s[1]^t[rc].s[1];if(dep[x])t[x].s[1]^=t[x].d;else t[x].s[0]^=t[x].d;
}
void rotate(int x,int &k)
{int y=t[x].f,z=t[y].f;if(y==k)k=x;else t[z].son[t[z].son[1]==y]=x;int w=(x==t[y].son[1]),g=t[x].son[!w];t[g].f=y,t[y].son[w]=g;t[y].f=x,t[x].son[!w]=y;t[x].f=z;upd(y);
}
void splay(int x,int &k)
{while(x!=k){int y=t[x].f,z=t[y].f;if(y!=k){if( (t[z].son[1]==y)==(t[y].son[1]==x) )rotate(y,k);else rotate(x,k);}rotate(x,k);}upd(x);
}
void in(int fa,int x)
{splay(fa,rt);int r=t[fa].son[1]; while(t[r].son[0])r=t[r].son[0];splay(r,t[fa].son[1]); t[r].son[0]=x,t[x].f=r;upd(r),upd(fa);
}
void dfs(int x,int fa)
{dep[x]=!dep[fa];if(fa){t[al[x]].son[1]=ar[x],t[ar[x]].f=al[x];t[al[x]].d=a[x]; upd(al[x]);in(fa,x);}for(int k=first[x];k;k=e[k].next)dfs(e[k].y,x);
}
int main()
{int n=read(),l=read()+1,i,u,x,y;for(i=1;i<=n;i++)a[i]=read()%l,z[i]=al[i]=i,ar[i]=i+n;for(i=1;i<n;i++)x=read(),y=read(),ins(x,y);tot=n<<1,rt=1;t[1].son[1]=n+1,t[1].d=a[1],t[n+1].f=1; upd(1);dfs(1,0);int m=read(),nw=0,ans;while(m--){u=read();if(u==1){x=z[read()^nw];splay(al[x],rt),splay(ar[x],t[rt].son[1]);ans=t[ t[ar[x]].son[0] ].s[ !dep[x] ];if(!ans)printf("GTY\n");else printf("MeiZ\n"),nw++;}else if(u==2){x=al[ z[read()^nw] ],y=read()^nw;splay(x,rt);t[x].s[ dep[x] ]^=t[x].d,t[x].d=y%l;}else{x=read()^nw,y=read()^nw,u=read()^nw;x=z[x],z[y]=y=++n, al[y]=++tot,ar[y]=++tot;dep[al[y]]=!dep[al[x]], t[al[y]].d=u%l;t[ar[y]].f=al[y],t[al[y]].f=al[x];upd(al[y]); in(al[x],al[y]);}}return 0;
}

BZOJ 3729: Gty的游戏相关推荐

  1. BZOJ 3729: Gty的游戏 [伪ETT 博弈论]【学习笔记】

    题意: 给定一棵有根树,每个节点有一些石子,每次可以将不多于k的石子移动到父节点 修改一个点的石子数,插入一个点,询问某棵子树是否先手必胜 显然是一个阶梯Nim 每次最多取k个,找规律或者观察式子易发 ...

  2. 【BZOJ 3729】3729: Gty的游戏 (Splay维护dfs序+博弈)

    未经博主同意不得转载 3729: Gty的游戏 Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 448  Solved: 150 Descriptio ...

  3. BZOJ 3731: Gty的超级妹子树

    Description 我曾在青山之中遇过你, 新竹做杖,鬓插紫茱萸. 跣足踏过无边丝雨, 又拾起燕川雪片片落如席-- Gty神(xian)犇(chong)从来不缺妹子-- 他又来到了一棵妹子树下,发 ...

  4. 【BZOJ3729】Gty的游戏,博弈+splay

    传送门 挺蛋疼的一道题 连想带做搞了一晚上晚自习+下午两节课 博弈方面还是很好弄的,就是"阶梯问题"+"Nim取模游戏" 分别维护深度为奇数和偶数的节点的sg函 ...

  5. BZOJ3729: Gty的游戏(伪ETT)

    题面 传送门 前置芝士 巴什博奕 \(Nim\)游戏的改版,我们现在每次最多只能取走\(k\)个石子,那么\(SG\)函数很容易写出来 \[SG(x)=mex_{i=1}^{\min(x,k)}SG( ...

  6. BZOJ.4820.[SDOI2017]硬币游戏(思路 高斯消元 哈希/AC自动机/KMP)

    BZOJ 洛谷 建出AC自动机,每个点向两个儿子连边,可以得到一张有向图.参照 [SDOI2012]走迷宫 可以得到一个\(Tarjan\)+高斯消元的\(O((nm)^3)\)的做法.(理论有\(6 ...

  7. [bzoj3729]Gty的游戏

    Description 给定一棵n个节点的数,第i个节点上有ai个石子. 有两个人在van游戏,每次操作者可以从x的子树中的任意一个点选择不超过m个石子移动到它的父亲. 给定t次操作,每次操作询问为x ...

  8. BZOJ 1434: [ZJOI2009]染色游戏 博弈

    [Submit][Status][Discuss] Description 一共n × m 个硬币,摆成n × m 的长方形.dongdong 和xixi 玩一个游戏, 每次可以选择一个连通块,并把其 ...

  9. bzoj 1862 [Zjoi2006]GameZ游戏排名系统

    1862: [Zjoi2006]GameZ游戏排名系统 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1134  Solved: 429 [Submit ...

最新文章

  1. css6图层 解锁,OpenLayers 5至6:图层无法渲染
  2. 解决input[type=number]无法显示非数字字符的问题
  3. 【控制】如何入门自动控制理论
  4. linux 运行python 看不到异常信息_linux python运行报编码错误
  5. 现在也是只能谢谢随笔了,但是在以后收货的日子里会有更多的感想记下
  6. c语言2L,求助,R8C 2L 如何在C语言定位常数数组到绝对地址
  7. copyleft_什么是copyleft?
  8. 测试用例-其他相关知识
  9. Anylogic问题-----模型运行中外部输入控制模型
  10. SAP CDS View基础语法
  11. 树莓派默认密码_树莓派快速指南,从购买到开机
  12. 以后不该吃的不能吃了。。。
  13. 如何远程连接计算机网络打印机,远程打印机共享怎么设置
  14. 网页打开微信/跳转微信
  15. 至于你信不信,反正我信了
  16. python利用tushare下载数据并计算当日收益率
  17. wordpress备份和还原和迁移
  18. 王者荣耀刷金币辅助(安卓调试桥与python的联合使用)
  19. ZLMediaKit视频推流和播放步骤
  20. 使用SpringBoot的CommandLineRunner遇到的坑

热门文章

  1. 视频去除水印,只需两分钟随时学会
  2. 御手洗sama 网易宝面试:java程序员(其实我根本不记得我投的是什么了,但是一直问的是java,应该就是java了)...
  3. kumo词云使用io_Microsoft Kumo Search可以在Google上使用。 再次。
  4. 判断这一天是这一年的第几天? 的三种方法! Java
  5. 部门管理中非递归搜索部门以及所管辖下部门
  6. python爬取丁香园首页疫情json数据,尝试存入mysql数据库
  7. Windows10重装设置(个人)
  8. 【计算机视觉】全息投影技术
  9. 【allegro 17.4软件操作保姆级教程九】布线后检查与调整
  10. 为docker ps命令添加服务名称