P2147 [SDOI2008]洞穴勘测
P2147 [SDOI2008]洞穴勘测
思路
没办法,我就是喜欢板子都想发的人
都是基础操作,不多说了
代码
#include <bits/stdc++.h>
#define ls ch[x][0]
#define rs ch[x][1]
#define FOR(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
const int N=3e5+7;
int read() {
int x=0,f=1;char s=getchar();
for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
return x*f;
}
int f[N],ch[N][2],lazy[N];
bool isroot(int x ) {return ch[f[x]][0]==x || ch[f[x]][1]==x;}
void tag(int x) {swap(ls,rs);lazy[x]^=1;}
void pushdown(int x) {
if(lazy[x]) {
tag(ls),tag(rs);
lazy[x]=0;
}
}
void rotate(int x) {
int y=f[x],z=f[y],k=ch[y][1]==x,m=ch[x][k^1];
if(isroot(y)) ch[z][ch[z][1]==y]=x;
ch[x][k^1]=y;
ch[y][k]=m;
if(m) f[m]=y;
f[x]=z;
f[y]=x;
}
int Q[N];
void splay(int x) {
int y=x,z=0;
Q[++z]=y;
while(isroot(y)) Q[++z]=y=f[y];
while(z) pushdown(Q[z--]);
while(isroot(x)) {
y=f[x],z=f[y];
if(isroot(y)) (ch[y][0]==x)^(ch[z][0]==y) ? rotate(x) : rotate(y);
rotate(x);
}
}
void access(int x) {
for(int y=0;x;y=x,x=f[x])
splay(x),rs=y;
}
void makeroot(int x) {
access(x);
splay(x);
tag(x);
}
int findroot(int x) {
access(x);
splay(x);
while(ls) pushdown(x),x=ls;
return x;
}
void link(int x,int y) {
makeroot(x);
if(findroot(y)!=x) f[x]=y;
}
void cut(int x,int y) {
makeroot(x);
if(findroot(y)==x&&f[x]==y&&!ch[x][1]) {
f[x]=ch[y][0]=0;
}
}
int main() {
int n=read(),m=read();
char s[100];
FOR(kkk,1,m) {
scanf("%s",s);
int x=read(),y=read();
if(s[0]=='Q') {
if(findroot(x)==findroot(y)) puts("Yes");
else puts("No");
} else if(s[0]=='C') link(x,y);
else cut(x,y);
}
return 0;
}
P2147 [SDOI2008]洞穴勘测的更多相关文章
- P2147 [SDOI2008]洞穴勘测(LCT)
P2147 [SDOI2008]洞穴勘测 裸的LCT. #include<iostream> #include<cstdio> #include<cstring> ...
- 洛谷P2147[SDOI2008]洞穴勘测(lct)
题目描述 辉辉热衷于洞穴勘测. 某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴.假 ...
- [洛谷P2147][SDOI2008]洞穴勘测
题目大意:有$n$个洞穴,$m$条指令,指令有三种 $Connect\;u\;v$:在$u,v$之间连一条边 $Destroy\;u\;v$:切断$u,v$之间的边 $Query\;u\;v$:询问$ ...
- 【题解】Luogu P2147 [SDOI2008]洞穴勘测
原题传送门 这题用Link-Cut-Tree解决,Link-Cut-Tree详解 我不太会踩爆Link-Cut-Tree的并查集做法qaq 我们用Link-Cut-Tree维护连通性(十分无脑) Co ...
- 洛谷 P2147 [SDOI2008]洞穴勘测 (线段树分治)
题目链接 题解 早就想写线段树分治的题了. 对于每条边,它存在于一段时间 我们按时间来搞 我们可把一条边看做一条线段 我们可以模拟线段树操作,不断分治下去 把覆盖\(l-r\)这段时间的线段筛选出来, ...
- 洛谷 P2147 [SDOI2008]洞穴勘测
以下这个做法应该是叫线段树分治... 根据修改操作预处理出每条边存在的时间区间[l,r](以操作序号为时间),然后把所有形式化后的修改挂到线段树节点上. 处理完修改后,dfs一遍线段树,进入某个节点时 ...
- 洛谷 P2147 [SDOI2008]洞穴勘测 LCT
Code: #include <cstdio> #include <algorithm> #include <string> #include <cstrin ...
- 洛谷P2147 [SDOI2008] 洞穴勘探 [LCT]
题目传送门 洞穴勘探 题目描述 辉辉热衷于洞穴勘测. 某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道 ...
- BZOJ2049:[SDOI2008]洞穴勘测——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=2049 https://www.luogu.org/problemnew/show/P2147 辉辉热 ...
随机推荐
- django admim后台不转义提交的html
autoescape¶ Controls the current auto-escaping behavior. This tag takes either on or off as an argum ...
- 【2017-2-20】C#运算符
运算符分类: 1.算术运算符 ⑴+ - * / %(取余,模) /3; Console.Write(d); Console.ReadLine(); 则输出结果为“3”,因为10和3都是int型,dec ...
- 不能安装vmtools解决:一个命令安装
https://blog.csdn.net/fly66611/article/details/77994339 换好源 sudo su apt-get update apt-get dist-upgr ...
- python 类似java的三目运算符
python中没有其他语言中的三元表达式,不过有类似的实现方法 其他语言中,例如java的三元表达式是这样 int a = 1; String b = ""; b = a > ...
- sqlyog连接Linux上的mysql报错误号码2013,错误号码1130的解决办法
sqlyog连接Linux上的mysql报错误号码2013,错误号码1130的解决办法 1.报错误号码2013,可能是端口号不是默认的3306,需要改成对应的,检查命令是: [root@host et ...
- 随笔 js-----------------------------------------------------------------------------------------------------
http://www.cnblogs.com/liuling/p/2014-4-19-04.html redis Base64.encode($( "#byerName").v ...
- [转载]Oracle左连接、右连接、全外连接以及(+)号用法
Oracle 外连接(OUTER JOIN) 左外连接(左边的表不加限制) 右外连接(右边的表不加限制) 全外连接(左右两表都不加限制) 对应SQL:LEFT/RIGHT/FULL OUTER JO ...
- Java学习路线:Java中的位移运算符介绍
学习java本来就是一件日积月累的事情,或许你通过自学能掌握一些皮毛技术,学到java的一些基本大面,但想要做到精通,还是需要自己技术的日积月累和工作经验的不断积累. 今天给大家分享的技术知识是:ja ...
- 大数据学习路线:Zookeeper集群管理与选举
大数据技术的学习,逐渐成为很多程序员的必修课,因为趋势也是因为自己的职业生涯.在各个技术社区分享交流成为很多人学习的方式,今天很荣幸给我们分享一些大数据基础知识,大家可以一起学习! 1.集群机器监控 ...
- flask框架----flask中的wtforms使用
一.简单介绍flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装: pip3 install wtforms 二.简单使用wtfo ...