传送门: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;
}

转载于:https://www.cnblogs.com/will7101/p/6675237.html

BZOJ 2049: [Sdoi2008]Cave 洞穴勘测——LCT相关推荐

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

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

  2. bzoj2049 [Sdoi2008]Cave 洞穴勘测——LCT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2049 第二道LCT! 这题是模板题,写了一遍以后感觉对LCT的认识又加深了. 代码如下: # ...

  3. bzoj2049 Cave 洞穴勘测 LCT模版

    2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 10 Sec  Memory Limit: 259 MB Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了 ...

  4. bzoj2049 [Sdoi2008]Cave 洞穴勘测

    [Sdoi2008]Cave 洞穴勘测 Time Limit: 10 Sec Memory Limit: 259 MB Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为J ...

  5. [SDOI2008]Cave 洞穴勘测

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

  6. bzoj2049: [Sdoi2008]Cave 洞穴勘测

    [题意] 给你一个森林,要求支持动态加边删边,并会询问在某一个时刻两点是否联通. [题解] 裸的lct,模版题.第一次写对lct,没写过真的难写.... [代码] 1 #include <ios ...

  7. 【LCT】洞穴勘测(luogu 2147/金牌导航 LCT-1)

    洞穴勘测 luogu 2147 金牌导航 LCT-1 题目大意 给你若干操作,有三种操作: 1.连接两个点 2.吧两个点之间的连边断掉(保证有这条边) 3.查询两个点之间是否连通 样例 #1 输入样例 ...

  8. [BZOJ2049] [SDOI2008] 洞穴勘测

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

  9. SDOI 2008 洞穴勘测

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

最新文章

  1. dom定位的三种元素
  2. HTTP缓存详解之etag
  3. 软件测试菲律宾,英雄联盟手游菲律宾测试资格怎么得 菲律宾测试资格获取攻略[多图]...
  4. serve : 无法加载文件 C:\Users\wb\AppData\Roaming\npm\serve.ps1
  5. linux Centos 服务器之间文件共享挂载
  6. 计算机本地用户和组winx,计算机(Winx系统)实用操作手册.doc
  7. 【Java】Servlet完全自学手册
  8. python画图怎么使用特殊符号?
  9. 阿里高管的思考方式真正厉害在哪?内部员工7000字深度干货
  10. document.querySelector()方法
  11. 云开发魔都团长头像制作微信小程序源码/带流量主
  12. 现在可以把小程序交给第三方开发或管理了
  13. [推荐]“痘痘”与所对应的疾病
  14. 关于笔记本电脑Linux下耳机电流噪声--已解决
  15. 【CISSP】安全评估与测试
  16. 计算机检索中各符号表示含义,文献检索中符号的含义这些符号在文献检索中的含义:AND、 OR、 NOT、 (W)、 TI、 W/s、 AU、 LENG...
  17. ORACLE 错误 1659,数据库导入dmp临时表空间内存不够
  18. 名帖09 邓石如 篆书《四箴四条屏》
  19. for each in 和 for in 和for of
  20. 电脑计算机里怎么找恢复出厂设置,Windows系统电脑如何恢复出厂设置?

热门文章

  1. python小程序源代码_【程序源代码】Spring Boot 考试小程序
  2. ctfshow-萌新-web6( 利用二进制绕过获取网站敏感信息)
  3. 域迁移过程下详细步骤
  4. 第89天:HTML5中 访问历史、全屏和网页存储API
  5. 微博开放第三方协议 媒体机构能重掌话语权吗?
  6. mysql5.7.18-winx64安装
  7. code第一部分数组:从有序数组中移除重复的数据
  8. 小牛电动京东众筹活动中的违约行为记录
  9. javaSE学习 访问控制
  10. MYSQL同步 Slave_IO_Running: No 或者Slave_SQL_Running: No 解决办法