传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2049

省选之前来切一道数据结构模板题。

题意

这是一道模板题

N个点,M次操作,每次加边/删边/询问两个点是否连通,保证每次操作之后仍然是一棵树。

N<=1e4,M<=2e5。

做法

裸的LCT。

需要支持查找一个点所在树的根,只要不断向上查找father就行了。

(fread就是快啊。

#include <bits/stdc++.h>
using namespace std;
const int MAXN=20005, MAXB=2e7;
char BUF[MAXB], *cp=BUF;
void rd(int &x){
x=0;
while(*cp<'0'||'9'<*cp) cp++;
while('0'<=*cp&&*cp<='9') x=x*10+*cp-'0', cp++;
}
char rdc(){
while(*cp<'A'||'Z'<*cp) cp++;
return *cp;
} int N, M, top; struct Node{
Node *ch[2], *fa;
int re;
}nd[MAXN], *rt, *st[MAXN]; inline int isrt(Node *x){return !(x->fa->ch[0]==x||x->fa->ch[1]==x);} void rot(Node *x){
Node *y=x->fa, *z=y->fa;
int l=y->ch[1]==x, r=!l;
if(!isrt(y)) z->ch[z->ch[1]==y]=x;
x->ch[r]->fa=y; y->fa=x; x->fa=z;
y->ch[l]=x->ch[r]; x->ch[r]=y;
} void down(Node *x){
if(x->re){
x->ch[0]->re^=1; x->ch[1]->re^=1;
swap(x->ch[0], x->ch[1]); x->re=0;
}
} void splay(Node *x){
st[top++]=x;
for(Node *i=x; !isrt(i); i=i->fa) st[top++]=i->fa;
for(;top;--top) down(st[top-1]);
while(!isrt(x)){
Node *y=x->fa, *z=y->fa;
if(!isrt(y)) rot((z->ch[1]==y)^(y->ch[1]==x)?x:y);
rot(x);
}
} inline void access(Node *x){
for(Node *i=nd; x!=nd; i=x,x=x->fa)
splay(x), x->ch[1]=i;
} inline void mkrt(Node *x){access(x),splay(x),x->re^=1;} inline Node *getrt(Node *x){while(x->fa!=nd)x=x->fa; return x;} inline void lin(Node *x, Node *y){mkrt(x); x->fa=y;} inline void cut(Node *x, Node *y){
mkrt(x); access(y); splay(y);
y->ch[0]=x->fa=nd;
} int main(){
fread(BUF, 1, MAXB, stdin);
rd(N),rd(M);
for(int i=0; i<=N; ++i) nd[i].ch[0]=nd[i].ch[1]=nd[i].fa=nd;
for(int i=0,u,v; i<M; ++i){
char ch=rdc(); rd(u), rd(v);
if(ch=='Q') puts(getrt(nd+u)==getrt(nd+v)?"Yes":"No");
else if(ch=='C') lin(nd+u,nd+v);
else cut(nd+u,nd+v);
}
return 0;
}

BZOJ 2049: [Sdoi2008]Cave 洞穴勘测——LCT的更多相关文章

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

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

  2. BZOJ 2049: [Sdoi2008]Cave 洞穴勘测 LCT

    2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnli ...

  3. BZOJ 2049: [Sdoi2008]Cave 洞穴勘测 (LCT维护连通性)

    直接把x设为根,然后查询y所在联通块的根是不是x就行了. CODE #include <cstdio> #include <cstring> #include <algo ...

  4. BZOJ 2049: [Sdoi2008]Cave 洞穴勘测 (动态树入门)

    2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1528  Solved: 644[Submit][ ...

  5. bzoj 2049: [Sdoi2008]Cave 洞穴勘测 动态树

    2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 3119  Solved: 1399[Submit] ...

  6. [BZOJ 2049] [Sdoi2008] Cave 洞穴勘测 【LCT】

    题目链接:BZOJ - 2049 题目分析 LCT的基本模型,包括 Link ,Cut 操作和判断两个点是否在同一棵树内. Link(x, y) : Make_Root(x); Splay(x); F ...

  7. 【刷题】BZOJ 2049 [Sdoi2008]Cave 洞穴勘测

    Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好 ...

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

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2049 [题意] 给定森林,可能有连边或断边的操作,回答若干个连通性的询问. [思路] ...

  9. 【BZOJ】2049: [Sdoi2008]Cave 洞穴勘测 LCT

    [题意]给定n个点和m个操作,每次操作:1.连接2个点.2.断开2个点.3.查询2个点是否连通.m<=2*10^5. [算法]Link-Cut Tree [题解]LCT模板题,Link,Cut, ...

随机推荐

  1. 多realm以及jdbcRealm配置

    多realm配置 public class MyRealm1 implements Realm { public String getName() { return "myrealm1&qu ...

  2. spring的事务传播特性

    PROPAGATION_REQUIRED(常用) Support a current transaction; create a new one if none exists.  支持一个当前事务;如 ...

  3. 【BZOJ2727】双十字(动态规划,树状数组)

    [BZOJ2727]双十字(动态规划,树状数组) 题面 BZOJ 洛谷 题解 我们去年暑假的时候考试考过. 我当时写了个大暴力混了\(70\)分.... 大暴力是这么写的: 预处理每个位置向左右/上/ ...

  4. RHEL 7中有关终端的快捷方式

    快速启动终端 网上有不错的教程,只是有时候和版本有一定的出入,这里涉及小白博主自行摸索的过程(RHEL 7.4). 1.点击桌面右上角,选择设置(小扳手) 2.选择键盘(Keyboard) 3.将进度 ...

  5. 使图片相对于上层DIV始终水平、垂直都居中

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. CSS中background样式的repeat和no-repeat

    自http://blog.sina.com.cn/s/blog_98eef7830101cv8t.html获取的知识,特此感谢. <!DOCTYPE html> <html lang ...

  7. UESTC--1727

    原题链接:http://acm.uestc.edu.cn/problem.php?pid=1727 分析:用 l[i] 记录第 i 层楼有多少物品需要往上继续搬运,如果某层楼没有物品,但是更上面还有, ...

  8. portal商品展示功能逻辑

    看下接口: 返回值: 门户商品搜索功能的实现: 根据分类id进行搜索,根据关键词进行搜索,并按照一定的顺序排序 业务逻辑: 1.查询分类是否存在. 2.如果分类存在,则递归分类,展示父类商品,子类商品 ...

  9. bzoj 3209 bzoj1799 数位dp

    3209: 花神的数论题 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2267  Solved: 1040[Submit][Status][Disc ...

  10. Qt每次运行都是重新编译问题

    按理说,Qt使用了makefile技术只会编译刚修改的源文件,但有时会遇到一运行项目就会重新编译的问题,严重浪费了时间. 问题就出在你的系统时间上,系统时间的不准确会影响makefile机制的判断过程 ...