洞穴勘测

luogu 2147

金牌导航 LCT-1

题目大意

给你若干操作,有三种操作:
1.连接两个点
2.吧两个点之间的连边断掉(保证有这条边)
3.查询两个点之间是否连通

样例 #1

输入样例 #1

200 5
Query 123 127
Connect 123 127
Query 123 127
Destroy 127 123
Query 123 127

输出样例 #1

No
Yes
No

样例#2

输入样例 #2

3 5
Connect 1 2
Connect 3 1
Query 2 3
Destroy 1 3
Query 2 3

输出样例 #2

Yes
No

数据范围

1⩽n⩽104,m⩽2×1051\leqslant n\leqslant 10^4, m\leqslant 2\times 10^51⩽n⩽104,m⩽2×105

解题思路

在LCT上建出相应的图,每次查询判断根节点是否相同即可

代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 10010
using namespace std;
int n, m, x, y, top, p[N], d[N], fa[N], son[N][2];
string str;
bool IR(int x)//LCT模板
{if (!fa[x]) return true;return son[fa[x]][0] != x && son[fa[x]][1] != x;
}
void down(int x)
{if (p[x] && x){swap(son[x][0], son[x][1]);p[son[x][0]] ^= 1;p[son[x][1]] ^= 1;p[x] = 0;}return;
}
bool ILS(int x)
{return x == son[fa[x]][0];
}
int which(int x)
{return x == son[fa[x]][1];
}
void rotate(int x)
{int y = fa[x], z = fa[y], k = !ILS(x), g = son[x][!k];if (!IR(y)) son[z][!ILS(y)] = x;son[x][!k] = y;son[y][k] = g;if (g) fa[g] = y;fa[x] = z;fa[y] = x;return;
}
void Splay(int x)
{d[top = 1] = x;for (int i = x; !IR(i); i = fa[i]) d[++top] = fa[i];while(top) down(d[top--]);while(!IR(x)){if (!IR(fa[x])){if (ILS(x) == ILS(fa[x])) rotate(fa[x]);else rotate(x);}rotate(x);}return;
}
void access(int x)
{for (int y = 0; x; y = x, x = fa[x]) Splay(x), son[x][1] = y;return;
}
void make_root(int x)
{access(x);Splay(x);p[x] ^= 1;return;
}
int find_root(int x)
{access(x);Splay(x);down(x);while(son[x][0]) x = son[x][0], down(x);Splay(x);return x;
}
void link(int x, int y)
{make_root(x);fa[x] = y;return;
}
void cut(int x, int y)
{make_root(x);access(y);Splay(y);son[y][0] = 0;fa[x] = 0;return;
}
int main()
{scanf("%d%d", &n, &m);while(m--){cin>>str;scanf("%d%d", &x, &y);if (str == "Connect") link(x, y);else if (str == "Destroy") cut(x, y);else if (find_root(x) == find_root(y)) puts("Yes");//判断根节点是否相同else puts("No"); }return 0;
}

【LCT】洞穴勘测(luogu 2147/金牌导航 LCT-1)相关推荐

  1. 【LCT】城市旅行(luogu 4842/金牌导航 LCT-3)

    正题 luogu 4842 金牌导航 LCT-3 题目大意 给你一棵树,让你进行一些操作: 1.删除一条边 2.连接一条边 3.给一条路径上的点加上x 4.给出一条路径,在该路径选取两个点,求这两个点 ...

  2. 【LCT】弹飞绵羊(luogu 3203/金牌导航 LCT-2)

    正题 luogu 3203 金牌导航 LCT-2 题目大意 给你n个格子,当你在第i个格子时,可以往后跳aia_iai​格,让你进行几下操作: 1.修改第i个数 2.查询在第i个格子跳多少下会跳出界 ...

  3. 【DP】【树状数组】方伯伯的玉米田/优美玉米(luogu 3287/金牌导航 数据结构优化DP-5)

    正题 luogu 3287 金牌导航 数据结构优化DP-5 题目大意 有n个玉米,给出高度,你可以选择一个区间,使这个区间的玉米高度+1,你可以进行k次这样的操作,查询你操作完后最长不下降子序列最大值 ...

  4. 【DP】【树状数组】免费馅饼(luogu 7302/金牌导航 数据结构优化DP-4)

    正题 luogu 7302 金牌导航 数据结构优化DP-4 题目大意 在坐标轴上会出现n个金币,第i个金币tit_iti​时在wiw_iwi​出现(只出现一个单位时间),价值为sis_isi​,当你t ...

  5. 【DP】【线段树】基站选址(luogu 2605/金牌导航 数据结构优化DP-2)

    正题 luogu 2605 金牌导航 数据结构优化DP-2 题目大意 有若干个村庄在一条直线上,距离第一个村庄did_idi​,在该村庄建立基站要花费cic_ici​,如果在离该村不大于sis_isi ...

  6. 【树链剖分】染色(luogu 2486/金牌导航 树链剖分-3)

    正题 luogu 2486 金牌导航 树链剖分-3 题目大意 给你一棵树,让你进行以下操作: 1.把一条路径染上一个颜色 2.查询一条路径上有多少个颜色段 解题思路 用树链剖分把问题转化为链上问题 然 ...

  7. 【树链剖分】软件管理(luogu 2146/金牌导航 树链剖分-2)

    正题 luogu 2146 金牌导航 树链剖分-2 题目大意 有若干软件,除了软件0,所有软件都依赖且只依赖于另外一个软件 当要删除一个软件时,所有依赖于该软件的软件都要删掉 当安装一个软件时,该软件 ...

  8. 【数学】拉格朗日插值(luogu 4781/金牌导航 拉格朗日插值-1)

    拉格朗日插值 luogu 4781 金牌导航 拉格朗日插值-1 题目大意 给出n个点,让你确定经过这n个点且不超过n-1次的方程,现在给出k,让你求出其函数值 样例#1 输入样例#1 3 100 1 ...

  9. 【高斯消元】球形空间产生器(luogu 4035/金牌导航 高斯消元-1)

    球形空间产生器 luogu 4035 金牌导航 高斯消元-1 题目大意 给出n+1个n维的点,让你求一个点,使该点到所有点欧几里得距离相等 输入样例 2 0.0 0.0 -1.0 1.0 1.0 0. ...

最新文章

  1. 16.swift字典
  2. js的下拉框事件之onchange
  3. 教程-经典Delphi教程网
  4. springboot 读取nacos配置的流程和数据变化实时更新机制
  5. tomcat启动时出现错误
  6. TD-SCDMA成为我国通信行业标准
  7. JS性能优化之文档碎片-document.createDocumentFragment
  8. 集成SpringSecurity---SpringBoot
  9. jmeter添加html,Jmeter 报告可视化 —— 配置生成测试报告仪表板,Jmeter + Jenkins 自动化构建生成 HTML 报告...
  10. ICCV2021 | 最新ICCV2021论文抢先看,附全部下载链接!ICCV2021下载
  11. TreeMap源码解析
  12. 血雨腥风43载,苹果帝国背后的5个男人
  13. win8系统如何开服务器,Win8.1怎么打开IIS服务器?Win8.1专业版64位系统中打开IIS服务器的方法...
  14. python2中可以使用print()函数吗_Python3中的 print 函数有哪些用法?
  15. 一个有趣的.net程序死锁问题
  16. 文件夹里没有index.html,gatsby-cli建立后没有index.html文件吗?
  17. vis.js绘图库的一个BUG以及源码修正
  18. python考勤系统_python – 使用Django的考勤系统
  19. 我对SAP培训的理解(转)
  20. 以太坊开发------Mist使用:合约及部署合约

热门文章

  1. 西北工业大学计算机毕业论文,光纤通信发射机本科毕业论文 西北工业大学.docx...
  2. linux服务器查配置信息失败,查看Linux服务器的配置信息
  3. 获取html滚动条位置,pc和移动端获取滚动条的位置
  4. 机器学习之乳腺癌问题(SVM)
  5. 计算机科普小知识——Win7系统32位与64位的区别,该如何选择?
  6. C++中 Map的了解与基本用法(代码演示+自我总结+map中一对多的用法)
  7. [Spring5]IOC容器_Bean管理XML方式_外部属性文件
  8. [JavaWeb-HTTP]HTTP概念
  9. 算法-排序-归并排序
  10. datagridview实时更新数据_旭诺云盒|智能办公新趋势进出口数据自动提取,通关状态实时更新...