模板

\(\text{Code}\)

#include <cstdio>
#include <iostream>
#define IN inline
#define RE register
using namespace std; const int N = 1e5 + 5;
int n, m; struct LCT{
int st[N], c[N][2], fa[N], v[N], s[N], tg[N];
IN void pushup(int x){s[x] = s[c[x][0]] ^ s[c[x][1]] ^ v[x];}
IN void reverse(int x){tg[x] ^= 1, swap(c[x][0], c[x][1]);}
IN void pushdown(int x)
{
if (!tg[x]) return; tg[x] = 0;
if (c[x][0]) reverse(c[x][0]);
if (c[x][1]) reverse(c[x][1]);
}
IN int isroot(int x){return c[fa[x]][0] != x && c[fa[x]][1] != x;}
IN void rotate(int x)
{
int y = fa[x], z = fa[y], k = (c[y][1] == x), w = c[x][!k];
if (!isroot(y)) c[z][c[z][1] == y] = x; c[x][!k] = y, c[y][k] = w;
if (w) fa[w] = y; fa[y] = x, fa[x] = z, pushup(y);
}
IN void splay(int x)
{
int y = x, z = 0; st[++z] = y;
while (!isroot(y)) st[++z] = y = fa[y];
while (z) pushdown(st[z--]);
while (!isroot(x)){y=fa[x],z=fa[y]; if (!isroot(y)) rotate((c[y][0]==x)^(c[z][0]==y)?x:y); rotate(x);}
pushup(x);
}
IN void access(int x){for(RE int y=0; x; y=x, x=fa[x]) splay(x), c[x][1] = y, pushup(x);}
IN void makeroot(int x){access(x), splay(x), reverse(x);}
IN int findroot(int x){access(x), splay(x); while (c[x][0]) pushdown(x),x=c[x][0]; splay(x); return x;}
IN void split(int x, int y){makeroot(x), access(y), splay(y);}
IN void link(int x, int y){makeroot(x); if (findroot(y)^x) fa[x] = y;}
IN void cut(int x, int y){makeroot(x); if (findroot(y)==x&&fa[y]==x&&!c[y][0]) fa[y]=c[x][1]=0,pushup(x);}
}T; int main()
{
scanf("%d%d", &n, &m);
for(RE int i = 1; i <= n; i++) scanf("%d", &T.v[i]);
for(int op, x, y; m; --m)
{
scanf("%d%d%d", &op, &x, &y);
if (op == 0) T.split(x, y), printf("%d\n", T.s[y]);
else if (op == 1) T.link(x, y);
else if (op == 2) T.cut(x, y);
else T.splay(x), T.v[x] = y, T.pushup(x);
}
}

最新文章

  1. JavaScript的理解记录(6)
  2. DSO动态加载PHP模块到Apache服务器
  3. PHP MVC 中的MODEL层
  4. C++ string 用法详解
  5. 把jqmobi 變成jQuery 的插件 從此使用jQuery
  6. [转载]Sublime Text 3 搭建 React.js 开发环境
  7. Mac使用指南
  8. SignalR2.0开发实例之——创建房间聊天
  9. POJ 1987 Distance Statistics(树的点分治)
  10. 【C语言的日常实践(八)】弦
  11. 树莓派小车By 树莓派爱好者ITJoker(通过python socket通信实现树莓派视频小车)(一)
  12. Java 资源本地化与国际化
  13. 接口调用(发送http请求)
  14. Jmeter设置默认中文页面
  15. linux设置自启动redis
  16. 12. Integer to Roman (JAVA)
  17. viewPager+fragment如何刷新缓存fragment
  18. (转)Android 之生成图形验证码
  19. Linux记录-文件格式
  20. 查看占用IO的进程

热门文章

  1. POST请求发送的表单数据和json数据的区别及python代码实现
  2. 配置 DosBox
  3. 自定义RBAC(4)
  4. 02.JavaScript学习笔记1
  5. Go语言性能剖析利器--pprof实战
  6. week_Last
  7. Octave/Matlab初步学习
  8. 利用Git同步思源笔记
  9. 07.synchronized都问啥?
  10. B站地区限制破解方法