传送门

又是权限题= =,过了NOIp我就要去当一只权限狗!

LCT裸题,get到了两个小姿势。

1.LCA操作应该在access中随时updata

2.Link操作可以更简单

void Link(int noda,int nodb){Reverse(noda);t[noda].fa=nodb;}
 //BZOJ 3282
 //by Cydiater
 //2016.9.16
 #include <iostream>
 #include <cstdio>
 #include <cstring>
 #include <algorithm>
 #include <queue>
 #include <map>
 #include <ctime>
 #include <cmath>
 #include <iomanip>
 #include <cstdlib>
 #include <string>
 using namespace std;
 #define ll long long
 #define up(i,j,n)        for(int i=j;i<=n;i++)
 #define down(i,j,n)        for(int i=j;i>=n;i--)
 ;
 const int oo=0x3f3f3f3f;
 inline int read(){
     ,f=;
     ;ch=getchar();}
     +ch-';ch=getchar();}
     return x*f;
 }
 ;
 struct Tree{
     ],v,Xor,fa,tag;
 }t[MAXN];
 namespace solution{
     inline ]==node;}
     inline ]!=node&&t[t[node].fa].son[]!=node;}
     inline void updata(int node){
         if(node){
             t[node].Xor=t[node].v;
             ])t[node].Xor^=t[t[node].son[]].Xor;
             ])t[node].Xor^=t[t[node].son[]].Xor;
         }
     }
     inline void downit(int node){
         if(t[node].tag){
             t[t[node].son[]].tag^=;t[t[node].son[]].tag^=;
             swap(t[node].son[],t[node].son[]);
             t[node].tag=;
         }
     }
     void rotate(int node){
         int old=t[node].fa,oldf=t[old].fa,which=get(node);
         ]==old]=node;
         t[old].son[which]=t[node].son[which^];t[t[old].son[which]].fa=old;
         t[node].son[which^]=old;t[old].fa=node;t[node].fa=oldf;
         updata(old);updata(node);
     }
     void splay(int node){
         top=;q[++top]=node;
         for(int i=node;!isroot(i);i=t[i].fa)q[++top]=t[i].fa;
         down(i,top,)downit(q[i]);
         while(!isroot(node)){
             int old=t[node].fa,oldf=t[old].fa;
             if(!isroot(old))rotate(get(node)==get(old)?old:node);
             rotate(node);
         }
     }
     void access(int node){
         ;
         while(node){
             splay(node);
             t[node].son[]=tmp;
             updata(node);tmp=node;
             node=t[node].fa;
         }
     }
     ;}
     void Link(int noda,int nodb){Reverse(noda);t[noda].fa=nodb;}
     ]==nodea)t[nodb].son[]=t[noda].fa=;}
     void LCA(int noda,int nodb){Reverse(nodb);access(noda);splay(noda);}
     int find(int node){
         access(node);splay(node);
         int tmp=node;
         ])tmp=t[tmp].son[];
         return tmp;
     }
     void change(int node,int num){
         access(node);splay(node);//down lazy_tag
         t[node].v=num;updata(node);
     }
     //Link-Cut-Tree
     void init(){
         N=read();M=read();
         up(i,,N){
             t[i].v=read();
             t[i].son[]=t[i].son[]=;
             t[i].Xor=t[i].v;t[i].fa=;
         }
     }
     void slove(){
         while(M--){
             op=read();
             ){
                 nodea=read();nodeb=read();
                 LCA(nodea,nodeb);printf("%d\n",t[nodea].Xor);
             }
             ){
                 nodea=read();nodeb=read();
                 if(find(nodea)==find(nodeb))continue;
                 Link(nodea,nodeb);
             }
             ){
                 nodea=read();nodeb=read();
                 if(find(nodea)!=find(nodeb))continue;
                 Cut(nodea,nodeb);
             }
             ){
                 node=read();num=read();
                 change(node,num);
             }
         }
     }
 }
 int main(){
     //freopen("input.in","r",stdin);
     using namespace solution;
     init();
     slove();
     ;
 }

BZOJ3282: Tree的更多相关文章

  1. BZOJ3282——Tree

    1.题目大意:动态树问题,点修改,链查询xor和 裸题一道.. #include <stack> #include <cstdio> #include <cstdlib& ...

  2. BZOJ-3282 Tree Link-Cut-Tree(似乎树链剖分亦可)

    蛋蛋用链剖A的,我写的LCT 3282: Tree Time Limit: 30 Sec Memory Limit: 512 MB Submit: 1241 Solved: 542 [Submit][ ...

  3. [bzoj3282]Tree (lct)

    昨天看了一天的lct..当然幸好最后看懂了(也许吧..) 论善良学长的重要性T_T,老司机带带我! 这题主要是删边的时候还要判断一下..蒟蒻一开始天真的以为存在的边才能删结果吃了一发wa... 事实是 ...

  4. BZOJ3282: Tree (LCT模板)

    Description 给定N个点以及每个点的权值,要你处理接下来的M个操作. 操作有4种.操作从0到3编号.点从1到N编号. 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor和 ...

  5. 【学习心得】Link-cut Tree

    Link-cut Tree是一种支持改变树(森林)的形态(link和cut),同时维护树的路径上节点信息的数据结构.lct通过splay来维护每次的perferred path,说白了就是一个动态的树 ...

  6. AHOI2018训练日程(3.10~4.12)

    (总计:共90题) 3.10~3.16:17题 3.17~3.23:6题 3.24~3.30:17题 3.31~4.6:21题 4.7~4.12:29题 ZJOI&&FJOI(6题) ...

  7. 【BZOJ3282】Tree (Link-Cut Tree)

    [BZOJ3282]Tree (Link-Cut Tree) 题面 BZOJ权限题呀,良心luogu上有 题解 Link-Cut Tree班子提 最近因为NOIP考炸了 学科也炸了 时间显然没有 以后 ...

  8. 【BZOJ3282】Tree LCT

    1A爽,感觉又对指针重怀信心了呢= =,模板题,注意单点修改时splay就好,其实按吾本意是没写的也A了,不过应该加上能更好维护平衡性. ..还是得加上好= = #include <iostre ...

  9. 【bzoj3282】Tree

    LCT模板题: 话说xor和的意思是所有数xor一下: #include<iostream> #include<cstdio> #include<cstring> ...

随机推荐

  1. UWP开源项目 LLQNotifier 页面间通信利器(移植EventBus)

    前言 EventBus是一个Android版本的页面间通信库,这个库让页面间的通信变得十分容易且大幅降低了页面之间的耦合.小弟之前玩Android的时候就用得十分顺手,现在玩uwp就觉得应该在这平台也 ...

  2. DirectX11 SDK 例程报错解决方法

    下载好DirectX11例程后,VS2015运行不起来,好几个报错 在这里记录一下,虽然挺简单的,但是我想对于像我这样的新手小伙伴们来说还是挺有用的 第一个错误: FXC : error X3501: ...

  3. jquery的getjson与jsonp

    仔细的学习jquery的getjson的用法. http://www.cnblogs.com/leejersey/p/3750232.html http://www.jb51.net/article/ ...

  4. BPR: Bayesian Personalized Ranking from Implicit Feedback-CoRR 2012——20160421

    1.Information publication:CoRR 2012 2.What 商品推荐中常用的方法矩阵因子分解(MF),协同过滤(KNN)只考虑了用户购买的商品,文章提出利用购买与未购买的偏序 ...

  5. C++ new失败的处理

    我们都知道,使用 malloc/calloc 等分配内存的函数时,一定要检查其返回值是否为“空指针”(亦即检查分配内存的操作是否成功),这是良好的编程习惯,也是编写可靠程序所必需的.但是,如果你简单地 ...

  6. js打字机效果实现

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>打 ...

  7. CSS3绘制弹球动画效果

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  8. Ubuntu14.04下jdk的安装

    1.下载JDK目前最新的JDK版本是:Java SE Development Kit 8u52.解压安装我们把JDK安装到这个路径:/usr/lib/jvm如果没有这个目录(第一次当然没有),我们就新 ...

  9. Android数据格式解析对象JSON用法(转)

    地址:http://www.cnblogs.com/devinzhang/archive/2012/01/09/2317315.html 里面的重点: JSON解析案例     (1)解析Object ...

  10. iOS开发小技巧--适当的清空模型中的某个数据,达到自己的需求,记得最后将数据还原(百思项目评论页面处理最热评论)

    一.项目需求,显示所有贴的时候,需要显示最热评论,但是点击进入相应帖子后,最热评论的label不要显示,如图: 解决方案 -- 该暂时保存的暂时保存,该清空的清空                   ...