P3690-[模板]Link Cut Tree(动态树)【Splay】
正题
题目链接:https://www.luogu.org/problem/P3690
题目大意
nnn个点mmm个操作,要求支持
- 询问路径异或和
- 连接一条边(若x,yx,yx,y没联通)
- 删除一条边
- 修改一个点的权值
解题思路
LCTLCTLCT板子题不解释。
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=3e5+100;
int n,m,v[N];
struct Link_Cut_Tree{int w[N],fa[N],son[N][2];bool r[N];#define ls son[x][0]#define rs son[x][1]bool nroot(int x){return son[fa[x]][0]==x||son[fa[x]][1]==x;}void PushUp(int x){w[x]=w[ls]^w[rs]^v[x];return;}void PushR(int x){swap(ls,rs);r[x]^=1;return;}void PushDown(int x){if(r[x]){if(ls) PushR(ls);if(rs) PushR(rs);r[x]=0;}return;}void Rotate(int x){int y=fa[x],z=fa[y],k=(son[y][1]==x),w=son[x][!k];if(nroot(y)) son[z][son[z][1]==y]=x;son[x][!k]=y;son[y][k]=w;if(w) fa[w]=y;fa[y]=x;fa[x]=z;PushUp(y);return;}void PushHall(int x){if(nroot(x)) PushHall(fa[x]);PushDown(x); return;}void Splay(int x){int y=x,z=0;PushHall(x);while(nroot(x)){y=fa[x];z=fa[y];if(nroot(y))Rotate((son[y][0]==x)^(son[z][0]==y)?x:y);Rotate(x);} PushUp(x);return;}void Access(int x){for(int y=0;x;x=fa[y=x])Splay(x),rs=y,PushUp(x);return;}void MakeRoot(int x){Access(x);Splay(x);PushR(x);return;}int FindRoot(int x){Access(x);Splay(x);while(ls) PushDown(x),x=ls;Splay(x);return x;}void Split(int x,int y){MakeRoot(x);Access(y);Splay(y);return;}void Link(int x,int y){MakeRoot(x);if(FindRoot(y)!=x) fa[x]=y;}void Cut(int x,int y){MakeRoot(x);if(FindRoot(y)==x&&fa[y]==x&&!son[y][0]){fa[y]=son[x][1]=0;PushUp(x);} }#undef ls#undef rs
}LCT;
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%d",&v[i]);while(m--){int op,x,y;scanf("%d%d%d",&op,&x,&y);if(op==0){LCT.Split(x,y);printf("%d\n",LCT.w[y]);}if(op==1){LCT.Link(x,y);}if(op==2){LCT.Cut(x,y);}if(op==3){LCT.Splay(x);v[x]=y;}}
}
P3690-[模板]Link Cut Tree(动态树)【Splay】相关推荐
- Link/Cut Tree学习笔记
最近正是实验课的高峰期,我数了一下,除了毛概没有实验课,其他的课都有实验课...不过好在这些实验都不是很难.我尽力挤出时间用来刷题. 简介 Link/Cut Tree和树链剖分很相似,二者处理的问题也 ...
- 模板:Link Cut Tree(LCT)
文章目录 前言 解析 原理 rotate(x) splay(x) access(x) findroot(x) makeroot(x) split(x,y) link(x,y) cut(x,y) pus ...
- Link Cut Tree 学习笔记
Link Cut Tree 学习笔记 说在前边 最近补 CF 碰见一道 LCT ,就打算学习一下这个东西...顺便复习一下 splay. 具体算法及实现 参考了FlashHu, Candy? P369 ...
- Link Cut Tree详解
Link Cut Tree ==Warning:千万不要跳读== 参考博客:https://www.cnblogs.com/flashhu/p/8324551.html 什么是动态树? 动态树问题, ...
- link cut tree 入门
鉴于最近写bzoj还有51nod都出现写不动的现象,决定学习一波厉害的算法/数据结构. link cut tree:研究popoqqq那个神ppt. bzoj1036:维护access操作就可以了. ...
- 15行代码AC——Link/Cut Tree CodeForces - 614A(爆long long处理+快速幂讲解)
励志用少的代码做高效表达 Problem describe Programmer Rostislav got seriously interested in the Link/Cut Tree dat ...
- luogu P3690 【模板】Link Cut Tree (动态树)
嘟嘟嘟 LCT竟然看了整整一天,但好歹是看懂了. 教程这里不写,强烈推荐 闪狐大佬的博客 . 但是还是有几句想说的. 1.尽管LCT和splay很像,但是有一些细节还是不一样的.首先是rotate,我 ...
- luoguP3690 【模板】Link Cut Tree (动态树)[LCT]
题目背景 动态树 题目描述 给定N个点以及每个点的权值,要你处理接下来的M个操作.操作有4种.操作从0到3编号.点从1到N编号. 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor ...
- Link Cut Tree学习笔记
捋一下思路 模板题:https://www.luogu.org/problemnew/show/P3690 推荐LCT的教程,个人认为很详细,本文做了部分引用:https://www.luogu.or ...
最新文章
- sonarQube安装及本机扫描C#项目
- pandas为dataframe所有的列名称名添加前缀(add_prefix)
- 2019 年 ACM Fellow出炉,陈熙霖、陶大程、周礼栋、谢源、李向阳等7位华人学者入选
- 开发文档之 概要设计说明书 详细设计说明书 数据库设计说明书
- PHP类有哪几种,PHP中有哪几种常用类型?
- mariadb mysql 5.6_MySQL / MariaDB 5.5 升级到 MySQL 5.6
- 中国大学慕课python答案第七章_中国大学慕课mooc用Python玩转数据章节答案
- Python 抛异常处理(精)
- 华为回应“停止社招”;iPhone XS 取消美颜; iCloud 大面积瘫痪 | 极客头条
- 如何向小白讲述软件架构发展历程?
- 公交查询www.chajt.com
- Entity Framework 实体框架的形成之旅--实体框架的开发的几个经验总结
- web网页设计期末课程大作业 简单的学生网页作业源码 基于HTML仿淘宝电商网站项目的设计与实现 企业网站制作
- 【K8S】Submariner实现跨集群通信
- java 导出word换行_[原创]java导出word的5种方式
- Bugku CTF 抄错的字符 WP
- 新闻——覃雄派、王会举、杜小勇、王珊论文两次入选“领跑者5000—中国精品科技期刊顶尖学术论文”
- Exception evaluating SpringEL expression: ***错误的一个解决办法
- c语言输出国旗图形,大家来看看国旗杂画
- Axure数据可视化BI大屏看板原型 FUI动态大数据分析后台
热门文章
- mat opencv 修改roi_设置图片ROI(OpenCV学习笔记之二)
- python 服务端框架_GitHub - edisonlz/fastor: Python服务端开发框架-极易上手,超出你的想象!...
- ab压力测试_Apache ab压力测试的知识点
- .gpg 进程 linux,小知识之Linux系统中的最大进程数,最大文件描述,最大线程数...
- oracle dbf文件设置,oracle移动数据dbf文件
- 81. 搜索旋转排序数组 II(014)二分查找+思路+详解+二种做法
- 7-1 寻找大富翁 (25 分)(思路加详解+两种做法(一种优先队列,一种vector容器))
- [Java基础]Date类基础
- C++实现链式基数排序
- [蓝桥杯2016决赛]阶乘位数-数论