思路:LCT的基本操作

//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 233333
int n,m,xx,yy,rev[N];
char op[11];
struct Tree{int l,r,where,num,fa;}t[N];
void reverse(int k){if(!k)return;rev[k]^=1;swap(t[k].l,t[k].r);}
void pushdown(int k){if(rev[k])reverse(t[k].l),reverse(t[k].r),rev[k]=0;}
void zig(int k){
int f=t[k].fa;pushdown(f),pushdown(k);
if(t[t[f].fa].l==f)t[t[f].fa].l=k;else if(t[t[f].fa].r==f)t[t[f].fa].r=k;
t[k].fa=t[f].fa,t[f].l=t[k].r,t[t[f].l].fa=f,t[k].r=f;t[f].fa=k;}
void zag(int k){
int f=t[k].fa;pushdown(f),pushdown(k);
if(t[t[f].fa].l==f)t[t[f].fa].l=k;else if(t[t[f].fa].r==f)t[t[f].fa].r=k;
t[k].fa=t[f].fa;t[f].r=t[k].l,t[t[f].r].fa=f;t[k].l=f;t[f].fa=k;}
int splay_root(int k){return t[k].fa&&(t[t[k].fa].l==k||t[t[k].fa].r==k);}
void splay(int k){pushdown(k);while(splay_root(k))if(t[t[k].fa].l==k)zig(k);else zag(k);}
int access(int k){int now=0;while(k)splay(k),t[k].r=now,now=k,k=t[k].fa;return now;}
void makeroot(int k){reverse(access(k)),splay(k);}
void link(int k1,int k2){makeroot(k1),t[k1].fa=k2;access(k1);}
void cut(int k1,int k2){makeroot(k1),access(k2),splay(k2),t[k2].l=t[k1].fa=0;}
int findfa(int k){while(t[k].fa)k=t[k].fa;return k;}
int find(int k1,int k2){makeroot(k1);if(findfa(k2)==k1)return 1;return 0;}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%s%d%d",op,&xx,&yy);
if(op[0]=='Q'){
if(find(xx,yy))puts("Yes");
else puts("No");
}
else if(op[0]=='C')link(xx,yy);
else cut(xx,yy);
}
}

BZOJ 2049 LCT的更多相关文章

  1. BZOJ 2049 & LCT又一模板

    题意: 自己看...加边删边问联通... SOL: 就加了一个findroot而已... 然而时间还是惨不忍睹...优化全开也才1700ms...膜seter... Code: /*========= ...

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

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

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

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

  4. BZOJ 2049: [Sdoi2008]Cave 洞穴勘測 LCT

    入门级LCT: 仅仅有 Cut Link 2049: [Sdoi2008]Cave 洞穴勘測 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 3073 ...

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

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

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

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2049 省选之前来切一道数据结构模板题. 题意 这是一道模板题. N个点,M次操作,每次加边/ ...

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

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

  8. bzoj 2049: [Sdoi]Cave 洞穴探测 (LCT)

    第一次写lct (这是一道lct裸题 这次没有可爱(划掉)的同学教我,虽然有模板,但是配合网上的讲解还是看不懂QAQ 然后做了几道题之后总算有些感觉辣 于是决定给自己挖个坑,近期写一个lct详解(不过 ...

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

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

随机推荐

  1. cocos2d-x:读取指定文件夹下的文件名称+解决中文乱码(win32下有效)

    援引:http://blog.csdn.net/zhanghefu/article/details/21284323 http://blog.csdn.net/cxf7394373/article/d ...

  2. Default Document <defaultDocument> IIS中的默认页面

    https://docs.microsoft.com/en-us/iis/configuration/system.webserver/defaultdocument/index Default do ...

  3. javaScript常用知识点有哪些

    javaScript常用知识点有哪些 一.总结 一句话总结:int = ~~myVar, // to integer | 是二进制或, x|0 永远等于x:^为异或,同0异1,所以 x^0 还是永远等 ...

  4. ThinkPHP5.0框架开发--第5章 TP5.0 控制器

    ThinkPHP5.0框架开发--第5章 TP5.0 控制器 第5章 TP5.0 控制器 ============================================== 上次复习 1.路 ...

  5. asp.net DataTables

    无聊做一个,但是还是留下一些疑惑: 在控件中加入例如编辑,删除之类的按钮,而不是以行内元素呈现. 真实分页的实现方法. 要是有知道的朋友,希望指点一二. 下面只实现的功能: 隐藏列 冻结列 分页 列排 ...

  6. Install the high performance Nginx web server on Ubuntu

    Look out Apache, there's a web server – Nginx (pronounced Engine X) – that means to dismantle you as ...

  7. Codeforces 982 B. Bus of Characters(模拟一个栈)

    解题思路: 排序之后模拟一个栈(也可以用真的栈),时间复杂度o(n). 代码: #include <bits/stdc++.h> using namespace std; typedef ...

  8. 【原创】rman备份出现ORA-19625

    [oracle@sunny stage]$ rman target / Recovery Manager: Release 10.2.0.1.0 - Production on Sun Mar 18 ...

  9. 初识Git(三)

    这次要记录一下对branch,merge的学习. 与先前一样创建一个pro文件夹,initi该文件夹,在该文件夹中新建一个空的MainCode.txt,然后add文本文件并且commit. 接下来我们 ...

  10. JavaScript 中表达式和语句的区别

    1.语句和表达式 JavaScript中的表达式和语句是有区别的.一个表达式会产生一个值,它可以放在任何需要一个值的地方,比如,作为一个函数调用的参数.下面的每行代码都是一个表达式: myvar3 + ...