题目链接

一道思路蛮清晰的题,题目有连边,删边,判断两点是否联通三个操作,因为题目中提到了“任意时刻任意两个洞穴之间至多只有一条路径”这一句话。所以在任意时刻,这些联通块都是树形的。所以不是很像splay森林LCT吗。

所以就是LCT板子了......

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn = 10010;
 4 typedef long long ll;
 5 int fa[maxn], ch[maxn][2], siz[maxn], val[maxn], lazy[maxn], st[maxn];
 6 inline bool isroot(int x) {
 7     return ch[fa[x]][0] != x && ch[fa[x]][1] != x;
 8 }
 9 inline void pushup(int x) {
10     siz[x] = siz[ch[x][0]] + siz[ch[x][1]] + 1;
11 }
12 inline void pushdown(int x) {
13     if (lazy[x]) {
14         if (ch[x][0])lazy[ch[x][0]] ^= 1;
15         if (ch[x][1])lazy[ch[x][1]] ^= 1;
16         swap(ch[x][0], ch[x][1]);
17         lazy[x] = 0;
18     }
19 }
20 inline void rotate(int x) {
21     int y = fa[x], z = fa[y];
22     int k = ch[y][1] == x;
23     if (!isroot(y))
24         ch[z][ch[z][1] == y] = x;
25     fa[x] = z; ch[y][k] = ch[x][k ^ 1]; fa[ch[x][k ^ 1]] = y;
26     ch[x][k ^ 1] = y; fa[y] = x;
27     pushup(y); pushup(x);
28 }
29 inline void splay(int x) {
30     int f = x, len = 0;
31     st[++len] = f;
32     while (!isroot(f))st[++len] = f = fa[f];
33     while (len)pushdown(st[len--]);
34     while (!isroot(x)) {
35         int y = fa[x];
36         int z = fa[y];
37         if (!isroot(y))
38             rotate((ch[y][0] == x) ^ (ch[z][0] == y) ? x : y);
39         rotate(x);
40     }
41     pushup(x);
42 }
43 inline void access(int x) {
44     for (int y = 0; x; x = fa[y = x])
45         splay(x), ch[x][1] = y, pushup(x);
46 }
47 inline void makeroot(int x) {
48     access(x); splay(x); lazy[x] ^= 1;
49 }
50 int Findroot(int x) {
51     access(x), splay(x);
52     while (ch[x][0])
53         pushdown(x), x = ch[x][0];
54     splay(x);
55     return x;
56 }
57 inline void split(int x, int y) {
58     makeroot(x); access(y); splay(y);
59 }
60 inline void Link(int x, int y) {
61     makeroot(x); fa[x] = y;
62 }
63 inline void Cut(int x, int y) {
64     split(x, y); fa[x] = ch[y][0] = 0; pushup(y);
65 }
66 char s[15];
67 int main() {
68     int n, m, x, y;
69     scanf("%d%d", &n, &m);
70     for (int i = 1; i <= m; i++) {
71         scanf("%s%d%d", s, &x, &y);
72         if (s[0] == 'C')
73             Link(x, y);
74         else if (s[0] == 'D')
75             Cut(x, y);
76         else {
77             if (Findroot(x) == Findroot(y))printf("Yes\n");
78             else printf("No\n");
79         }
80     }
81 }

转载于:https://www.cnblogs.com/sainsist/p/11551251.html

[Bzoj2049][Sdoi2008]Cave 洞穴勘测相关推荐

  1. bzoj2049 [Sdoi2008]Cave 洞穴勘测

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

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

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

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

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

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

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

  5. [SDOI2008]Cave 洞穴勘测

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

  6. BZOJ 2049: [Sdoi2008]Cave 洞穴勘测——LCT

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2049 省选之前来切一道数据结构模板题. 题意 这是一道模板题. N个点,M次操作,每次加边/ ...

  7. bzoj2049 Cave 洞穴勘测 LCT模版

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

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

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

  9. SDOI 2008 洞穴勘测

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

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

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

最新文章

  1. C语言-getopt函数
  2. Java Annotations: Explored Explained--转载
  3. 通过源代码研究ASP.NET MVC中的Controller和View(三)
  4. 【报告分享】2020快手短视频直播电商营销增长宝典.pdf(附下载链接)
  5. php 科学计数 位数,PHP采用超长位数字运算防止数字以科学计数法显示的实例
  6. 被调用的对象已与其客户端断开连接 win10_【完整案例】基于Socket开发TCP传输客户端...
  7. nginx.conf文件配置及nginx重启脚本
  8. python 象棋算法接口_python输出国际象棋棋盘的实例分享
  9. 【Java】23 函数式编程
  10. 计算机基础知识在教学的应用,计算机基础知识中项目教学法的应用
  11. 图解Windows10+优麒麟双系统安装
  12. mongodb联表查询
  13. [TGE游戏引擎粒子系统研究]制作逼真得爆炸效果--展示篇
  14. 基于顺序存储结构的图书信息表
  15. 2021年全球粘胶纤维收入大约15150百万美元,预计2028年达到20740百万美元
  16. 前端福利:使用Wallpaper Engine让自己的桌面炫酷起来
  17. 87键键盘实现小键盘数字/键盘改建软件
  18. 2014134026武雪芹
  19. deepin 团队_深度系统(Deepin)浅度体验记——应用软件篇
  20. 2023淮阴工学院计算机考研信息汇总

热门文章

  1. android第十二步Pull解析器解析和生成XML内容
  2. 实验室双显示屏安装使用记录
  3. 如何对ado.net做比较好的封装?
  4. Could not find an NgModule. Use the skip-import option to skip importing in NgModule.
  5. putty-gns3
  6. Kaggle实战之一回归问题
  7. setValuesForKeysWithDictionary:的用途
  8. Ngnix的日志管理和用定时任务完成日志切割
  9. DisplayX显示器测试、显示器屏幕检测
  10. AFNetWorking网络库教程