粘板子:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 300050;
template<typename T>
inline void read(T&x)
{
T f = 1,c = 0;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){c=c*10+ch-'0';ch=getchar();}
x = f*c;
}
int n,m,val[N];
struct LCT
{
int fa[N],ch[N][2],w[N],v[N];
bool res[N];
inline void rever(int u){swap(ch[u][0],ch[u][1]);res[u]^=1;}
inline bool isroot(int u){return ch[fa[u]][0]!=u&&ch[fa[u]][1]!=u;}
inline void update(int u){w[u]=w[ch[u][0]]^w[ch[u][1]]^v[u];}
inline void pushdown(int u)
{
if(!u)return ;
if(res[u])
{
rever(ch[u][0]);
rever(ch[u][1]);
res[u]=0;
}
}
void rotate(int x)
{
int y = fa[x],z = fa[y],k = (ch[y][1]==x);
if(!isroot(y))ch[z][ch[z][1]==y]=x;fa[x] = z;
ch[y][k] = ch[x][!k],fa[ch[x][!k]] = y;
ch[x][!k] = y,fa[y] = x;
update(y),update(x);
}
void down(int x)
{
if(!isroot(x))down(fa[x]);
pushdown(x);
}
void splay(int x)
{
down(x);
while(!isroot(x))
{
int y = fa[x],z = fa[y];
if(!isroot(y))
(ch[z][1]==y)^(ch[y][1]==x)?rotate(x):rotate(y);
rotate(x);
}
}
void access(int x)
{
int y = 0;
while(x)
{
splay(x);ch[x][1]=y;
update(x);y=x,x=fa[x];
}
}
void mtr(int x)
{
access(x);
splay(x);
rever(x);
}
int get_root(int x)
{
access(x);
splay(x);
while(ch[x][0])x=ch[x][0];
return x;
}
void link(int x,int y)
{
mtr(x);
if(get_root(y)!=x)fa[x]=y;
}
void cut(int x,int y)
{
mtr(x);
access(y),splay(y);
if(ch[y][0]==x)
{
ch[y][0]=fa[x]=0;
update(y);
}
}
void insert(int x,int y)
{
splay(x);
v[x]=y;
update(x);
}
int query(int x,int y)
{
mtr(x);
access(y);
splay(y);
return w[y];
}
}tr;
int main()
{
read(n),read(m);
for(int i=1;i<=n;i++)read(val[i]),tr.v[i]=tr.w[i]=val[i];
for(int op,x,y,i=1;i<=m;i++)
{
read(op),read(x),read(y);
if(op==0)printf("%d\n",tr.query(x,y));
else if(op==1)tr.link(x,y);
else if(op==2)tr.cut(x,y);
else tr.insert(x,y);
}
return 0;
}

LCT板子的更多相关文章

  1. BZOJ 2049 SDOI2008 洞穴勘测 LCT板子

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2049 题意概述:给出N个点,一开始不连通,M次操作,删边加边,保证图是一个森林,询问两点连 ...

  2. 沉迷Link-Cut tree无法自拔之:[BZOJ2049]洞穴勘探(蒟蒻的LCT板子)

    来自蒟蒻 \(Hero \_of \_Someone\) 的 \(LCT\) 学习笔记 最近学了一波 \(LCT\) , 于是怒刷 \(LCT\) 合集...... $ $ 学的时候借鉴了 Clove ...

  3. 一堆LCT板子

    搞了一上午LCT,真是累死了-- 以前总觉得LCT高大上不好学不好打,今天打了几遍感觉还可以嘛= =反正现在的水平应付不太难的LCT题也够用了,就这样好了,接下来专心搞网络流. 话说以前一直YY不出来 ...

  4. 好的LCT板子和一句话

    typedef long long ll; const int maxn = 400050; struct lct { int ch[maxn][2], fa[maxn], w[maxn]; bool ...

  5. BZOJ 2002 LCT板子题

    思路: LCT啊... (分块也行) 不过YOUSIKI出了一道“弹飞大爷” 就不能用分块水过去了 //By SiriusRen #include <cstdio> #include &l ...

  6. 洛谷P3203 [HNOI2010]弹飞绵羊(LCT,Splay)

    洛谷题目传送门 关于LCT的问题详见我的LCT总结 思路分析 首先分析一下题意.对于每个弹力装置,有且仅有一个位置可以弹到.把这样的一种关系可以视作边. 然后,每个装置一定会往后弹,这不就代表不存在环 ...

  7. bzoj 2049: [Sdoi2008]Cave 洞穴勘测 (LCT)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2049 题面: 2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 1 ...

  8. ☆ [NOI2014] 魔法森林 「LCT动态维护最小生成树」

    题目类型:\(LCT\)动态维护最小生成树 传送门:>Here< 题意:带权无向图,每条边有权值\(a[i],b[i]\).要求一条从\(1\)到\(N\)的路径,使得这条路径上的\(Ma ...

  9. LCT模板(指针版)

    本来是想做THUWC2017的泰勒展开xLCT题的-- 然后觉得数组写很麻烦-- 然后就决定挑战指针版-- 然后写得全是BUG-- 与BUG鏖战三千年后,有了这个指针版LCT板子! #include ...

随机推荐

  1. Solution -「NWRRC 2017」「洛谷 P7024」Fygon 2.0

    \(\mathcal{Description}\)   Link.   给定一个无并列语句的多重循环,每个变量取值的左端点只能是 \(1\) 或已定义的变量:右端点只能是 \(n\) 或已定义的变量. ...

  2. c++ 子类与父类之间的类型转换

    子类与父类之间的类型转换 先给一段代码 class Base { public: int a = 10; }; class pub_Derv : public Base { Base *getBase ...

  3. NeurIPS 2017 | TernGrad: Ternary Gradients to Reduce Communication in Distributed Deep Learning

    在深度神经网络的分布式训练中,梯度和参数同步时的网络开销是一个瓶颈.本文提出了一个名为TernGrad梯度量化的方法,通过将梯度三值化为\({-1, 0, 1}\)来减少通信量.此外,本文还使用逐层三 ...

  4. 关于 Xcode 更新 appleID 更换

    可能不少人会遇到 前一位同事走之后,他的 appID帐号下载的东西更新不了 下面给予大家一个解决办法  例如 Xcode  1.打开引用程序目录 2.找到Xcode,右键"显示包内容&quo ...

  5. python2写ping监控,自动发现ip

    玩了hostmonitor,老外写的很好.但是不符合国情,只有邮件适合发送. 今天用python 写一个自动发现ip,ping失败报警的程序.(微信和邮件报警) 以前用python写的发微信,发邮件直 ...

  6. Kubernetes:更新与回滚

    Blog:博客园 个人 除了创建,Deployment 提供的另一个重要的功能就是更新应用,这是一个比创建复杂很多的过程.想象一下在日常交付中,在线升级是一个很常见的需求,同时应该尽量保证不能因为升级 ...

  7. 中了勒索病毒的win7系统

  8. RFC2889——拥塞控制测试

    一.简介 RFC 2889为LAN交换设备的基准测试提供了方法学,它将RFC 2544中为网络互联设备基准测试所定义的方法学扩展到了交换设备,提供了交换机转发性能(Forwarding Perform ...

  9. Dashboard究竟是什么,它在数据展示上的优势何在?

    ​相信很多人在做数据分析工作的时候都遇到这种情况,辛辛苦苦做出来的数据报表老板看了嫌弃不够直观.生动,客户看了嫌弃不够高大上.这个时候不妨尝试一下使用Dashboard来展示报表数据,可能有些人对Da ...

  10. 报表软件测评来啦!Smartbi电子表格使用感受

    最近因为工作需求,需要用到一些报表工具软件,看到Smartbi比较方便,可以直接在excel中进行配置,所以安装体验了一下. 下载 Smartbi有多个版本,我主要是在excel中使用,所以下载了一个 ...