bzoj 2049: [Sdoi]Cave 洞穴探测 (LCT)
2024-09-06 21:51:44
第一次写lct
(这是一道lct裸题
这次没有可爱(划掉)的同学教我,虽然有模板,但是配合网上的讲解还是看不懂QAQ
然后做了几道题之后总算有些感觉辣
于是决定给自己挖个坑,近期写一个lct详解(不过像我这么懒的人= =
下面是代码
/**************************************************************
Problem: 2049
User: cminus
Language: C++
Result: Accepted
Time:1532 ms
Memory:984 kb
****************************************************************/ #include <cstdio>
#include <algorithm>
#include <stack>
using namespace std;
#define kd(x) (ch[fa[x]][1] == x)
#define setc(f, c, k) (ch[fa[c] = f][k] = c)
#define isRoot(x) (ch[fa[x]][0] != x and ch[fa[x]][1] != x)
#define ls ch[x][0]
#define rs ch[x][1]
const int N = ; int fa[N], ch[N][], n, m;
bool mark[N]; inline void push(int x){
if (mark[x]){
mark[x] = false;
mark[ls] ^= ;
mark[rs] ^= ;
swap(ls, rs);
}
}
stack < int > S;
inline void pushDown(int x) {
S.push(x);
while (!isRoot(x))
S.push(x = fa[x]);
while (!S.empty())
push(S.top()), S.pop();
} inline void rotate (int x) {
int y = fa[x], k = kd(x);
setc(y, ch[x][k ^ ], k);
if (isRoot(y)) fa[x] = fa[y];
else setc(fa[y], x, kd(y));
setc(x, y, k ^ );
} inline void splay (int x) {
pushDown(x);
while (! isRoot(x)) {
if (! isRoot(fa[x]))
if (kd(x) == kd(fa[x])) rotate(fa[x]);
else rotate(x);rotate(x);
}
} inline void access(int x) {
int t = ;
while (x) {
splay(x);
rs = t; t = x; x = fa[x];
}
} inline void makeRoot(int u) {
access(u); splay(u);
mark[u] ^= ;
} inline void link(int u, int v){
makeRoot(u); fa[u] = v;
} inline void cut(int u, int v){
makeRoot(u);
access(v); splay(v);
fa[u] = ch[v][] = ;
} inline int findRoot(int x) {
while(fa[x]) x = fa[x];
return x;
}
int main(){
scanf("%d %d", &n, &m);
char str[];
while(m--){
int u, v;
scanf("%s %d %d", str, &u, &v);
if (*str == 'C') link(u, v);
else if (*str == 'D') cut(u, v);
else puts((findRoot(u) == findRoot(v)) ? "Yes" : "No");
}
return ;
}
最新文章
- Java 8 的 Nashorn 脚本引擎教程
- 时光煮雨 Unity3D实现2D人物动画① UGUI&;Native2D序列帧动画
- lamper技能树
- SELECT INTO和INSERT INTO SELECT
- Open Explorer Plugin for Eclipse (eclipse 插件 在eclipse里面打开文件目录)
- HDU-4664 Triangulation 博弈,SG函数找规律
- js方法实现--上传文件功能
- 修改tomcat JVM 大小
- hive中,动态添加map和reduce的大小,以增加并行度
- Access,MSSQL:随机读取N条记录
- Dockerfile详解(二)
- Security Permissions Caching
- MySQL基础 - 视图
- 在Eclipse之中调试FastDFS-storage
- [AngularJS] Angular 1.3 ngAria - 2
- 腾讯 微信春招nlp实习生一面二面(猝)
- 高德地图API获取天气
- Storm实战常见的问题
- [转] 利用js实现 禁用浏览器后退
- POJ 1860 Currency Exchange【bellman_ford判断是否有正环——基础入门】