博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[洛谷P2147][SDOI2008]洞穴勘测
阅读量:6829 次
发布时间:2019-06-26

本文共 1959 字,大约阅读时间需要 6 分钟。

题目大意:有$n$个洞穴,$m$条指令,指令有三种

  1. $Connect\;u\;v$:在$u,v$之间连一条边
  2. $Destroy\;u\;v$:切断$u,v$之间的边
  3. $Query\;u\;v$:询问$u,v$是否连通

(数据保证合法)

题解:$LCT$(潘佳奇的板子)

卡点:无(潘佳奇的板子)

C++ Code:

#include 
#include
#define maxn 10010using namespace std;int son[2][maxn], fa[maxn], tg[maxn];inline bool get(int x, int flag = 1) {return son[flag][fa[x]] == x;}inline bool is_root(int x) {return !(get(x, 0) || get(x, 1));}inline void swap(int &x, int &y) {x ^= y ^= x ^= y;}inline void rotate(int x) { int y = fa[x], z = fa[y]; bool b = get(x); if (!is_root(y)) son[get(y)][z] = x; son[b][y] = son[!b][x]; son[!b][x] = y; fa[y] = x; fa[x] = z; fa[son[b][y]] = y;}inline void pushdown(int x) { if (tg[x]) { tg[son[0][x]] ^= 1; tg[son[1][x]] ^= 1; swap(son[0][x], son[1][x]); tg[x] ^= 1; }}int st[maxn], top;inline void splay(int x) { st[top = 1] = x; for (int y = x; !is_root(y); st[++top] = y = fa[y]); for (; top; --top) if (tg[st[top]]) pushdown(st[top]); for (; !is_root(x); rotate(x)) if (!is_root(fa[x])) get(x) ^ get(fa[x]) ? rotate(x) : rotate(fa[x]);}inline void access(int x) {for (int t = 0; x; son[1][x] = t, t = x, x = fa[x]) splay(x);}inline void make_root(int x) {access(x); splay(x); tg[x] ^= 1;}inline void split(int x, int y) {make_root(x); access(y); splay(y);}inline void link(int x, int y) {make_root(x); fa[x] = y;}inline void cut(int x, int y) {split(x, y); son[0][y] = fa[x] = 0;}inline bool query(int x, int y) { split(x, y); int now = y; while (son[0][now]) now = son[0][now]; return now == x;}int n, Q, x, y;char s[30];int main() { scanf("%d%d", &n, &Q); while (Q --> 0) { scanf("%s%d%d", s, &x, &y); if (s[0] == 'Q') { if (query(x, y)) puts("Yes"); else puts("No"); } else { if (s[0] == 'C') link(x, y); else cut(x, y); } } return 0;}

 

转载于:https://www.cnblogs.com/Memory-of-winter/p/9511664.html

你可能感兴趣的文章
C#中的Action<>和Func<>
查看>>
关于opencv中人脸识别主函数的部分注释详解。
查看>>
SQLServer内核架构剖析 (转载)
查看>>
Android 风格化的 Toggle Buttons
查看>>
Eclipse中SVN的安装步骤(两种)和用法
查看>>
安全运维之:网络实时流量监测工具iftop
查看>>
在 Windows上配置NativeScript CLI
查看>>
ubuntu14.04 qt4 C++开发环境搭建
查看>>
iOS 通讯录-获取联系人属性
查看>>
HTML5 文件域+FileReader 读取文件(一)
查看>>
有return的情况下try catch finally的执行顺序
查看>>
OSI七层模型具体解释
查看>>
9.中位数与顺序统计量
查看>>
第二章 知识图谱——机器大脑中的知识库
查看>>
Android 从清单配置文件元数据中获取值
查看>>
UML用例图
查看>>
Bitmap基本概念及在Android4.4系统上使用BitmapFactory的注意事项
查看>>
Objective-C:MRC(引用计数器)获得对象所有权的方式(init、retain、copy等)
查看>>
PowerShell 在线教程 4
查看>>
不要让你的未来,现在恨自己
查看>>