题目描述

辉辉热衷于洞穴勘测。

某天,他按照地图来到了一片被标记为JSZX的洞穴群地区。经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴。假如两个洞穴可以通过一条或者多条通道按一定顺序连接起来,那么这两个洞穴就是连通的,按顺序连接在一起的这些通道则被称之为这两个洞穴之间的一条路径。 洞穴都十分坚固无法破坏,然而通道不太稳定,时常因为外界影响而发生改变,比如,根据有关仪器的监测结果,123号洞穴和127号洞穴之间有时会出现一条通道,有时这条通道又会因为某种稀奇古怪的原因被毁。

辉辉有一台监测仪器可以实时将通道的每一次改变状况在辉辉手边的终端机上显示:

如果监测到洞穴u和洞穴v之间出现了一条通道,终端机上会显示一条指令 Connect u v

如果监测到洞穴u和洞穴v之间的通道被毁,终端机上会显示一条指令 Destroy u v

经过长期的艰苦卓绝的手工推算,辉辉发现一个奇怪的现象:无论通道怎么改变,任意时刻任意两个洞穴之间至多只有一条路径。

因而,辉辉坚信这是由于某种本质规律的支配导致的。因而,辉辉更加夜以继日地坚守在终端机之前,试图通过通道的改变情况来研究这条本质规律。 然而,终于有一天,辉辉在堆积成山的演算纸中崩溃了……他把终端机往地面一砸(终端机也足够坚固无法破坏),转而求助于你,说道:“你老兄把这程序写写吧”。

辉辉希望能随时通过终端机发出指令 Query u v,向监测仪询问此时洞穴u和洞穴v是否连通。现在你要为他编写程序回答每一次询问。 已知在第一条指令显示之前,JSZX洞穴群中没有任何通道存在。

输入输出格式

输入格式:

第一行为两个正整数n和m,分别表示洞穴的个数和终端机上出现过的指令的个数。 以下m行,依次表示终端机上出现的各条指令。每行开头是一个表示指令种类的字符串s("Connect”、”Destroy”或者”Query”,区分大小写),之后有两个整数u和v (1≤u, v≤n且u≠v) 分别表示两个洞穴的编号。

输出格式:

对每个Query指令,输出洞穴u和洞穴v是否互相连通:是输出”Yes”,否则输出”No”。(不含双引号)

输入输出样例

输入样例#1: 复制

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

输出样例#1: 复制

No
Yes
No

输入样例#2: 复制

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

输出样例#2: 复制

Yes
No

说明

数据说明

10%的数据满足n≤1000, m≤20000

20%的数据满足n≤2000, m≤40000

30%的数据满足n≤3000, m≤60000

40%的数据满足n≤4000, m≤80000

50%的数据满足n≤5000, m≤100000

60%的数据满足n≤6000, m≤120000

70%的数据满足n≤7000, m≤140000

80%的数据满足n≤8000, m≤160000

90%的数据满足n≤9000, m≤180000

100%的数据满足n≤10000, m≤200000

保证所有Destroy指令将摧毁的是一条存在的通道

本题输入、输出规模比较大,建议c\c++选手使用scanf和printf进行I\O操作以免超时

题解

一道LCT的板子题

连边就直接link

删边直接cut

查询是否联通用findroot操作

 1 //minamoto
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cctype>
 5 #include<map>
 6 #define N 10005
 7 using namespace std;
 8 inline int read(){
 9     #define num ch-'0'
10     char ch;bool flag=0;int res;
11     while(!isdigit(ch=getchar()))
12     (ch=='-')&&(flag=true);
13     for(res=num;isdigit(ch=getchar());res=res*10+num);
14     (flag)&&(res=-res);
15     #undef num
16     return res;
17 }
18 namespace lct{
19     int top,s[N],ch[N][2],fa[N];bool rev[N];
20     bool isroot(int x){return ch[fa[x]][0]!=x&&ch[fa[x]][1]!=x;}
21     void pushdown(int x){if(rev[x])swap(ch[x][0],ch[x][1]),rev[ch[x][0]]^=1,rev[ch[x][1]]^=1,rev[x]^=1;}
22     void rotate(int x){
23         int y=fa[x],z=fa[y],d=(ch[y][1]==x);if(!isroot(y)) ch[z][ch[z][1]==y]=x;
24         fa[x]=z,fa[y]=x;fa[ch[x][d^1]]=y,ch[y][d]=ch[x][d^1],ch[x][d^1]=y;
25     }
26     void splay(int x){
27         s[top=1]=x;for(int i=x;!isroot(i);i=fa[i]) s[++top]=fa[i];for(int i=top;i>=1;--i) pushdown(s[i]);
28         for(int y=fa[x],z=fa[y];!isroot(x);y=fa[x],z=fa[y]){
29             if(!isroot(y)) ((ch[z][1]==y)^(ch[y][1]==x))?rotate(x):rotate(y);rotate(x);
30         }
31     }
32     void access(int x){int t=0;while(x){splay(x),ch[x][1]=t,t=x,x=fa[x];}}
33     void makeroot(int x){access(x),splay(x),rev[x]^=1;}
34     int findroot(int x){access(x);splay(x);pushdown(x);while(ch[x][0]) pushdown(x=ch[x][0]);return x;}
35     void link(int x,int y){makeroot(x),access(y),splay(y),fa[x]=y;}
36     void cut(int x,int y){makeroot(x),access(y),splay(y),fa[x]=ch[y][0]=0;}
37 }
38 using namespace lct;
39 int main(){
40     //freopen("testdata.in","r",stdin);
41     int n,m;
42     n=read(),m=read();
43     while(m--){
44         char s[10];int u,v;
45         scanf("%s",s),u=read(),v=read();
46         switch(s[0]){
47             case 'C':link(u,v);break;
48             case 'D':cut(u,v);break;
49             case 'Q':puts(findroot(u)==findroot(v)?"Yes":"No");
50         }
51     }
52     return 0;
53 }

转载于:https://www.cnblogs.com/bztMinamoto/p/9341232.html

[BZOJ2049] [SDOI2008] 洞穴勘测相关推荐

  1. BZOJ-2049 [SDOI2008]洞穴勘测

    LCT模版题.... #include <cstdlib> #include <cstdio> #include <cstring> #include <al ...

  2. bzoj2049 Cave 洞穴勘测 LCT模版

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

  3. 题解 洛谷P2147/BZOJ2049【[SDOI2008]洞穴勘测】

    Link-Cut-Tree的模板题啊......(听说还可以用其他的方法做,不管了,直接上LCT) 没有要求维护点权,只需要维护点的连通性即可. 就是朴素的LCT,居然还不要pushup. 感觉有些不 ...

  4. 洛谷P2147[SDOI2008]洞穴勘测

    题目 LCT,或者并查集水过. 首先并查集这道题不能路径压缩,因为路径压缩是为了用牺牲一些信息的方法来加快速度,可是这道题我们需要这个信息,所以不能路径压缩. 剩下的操作就只剩下了暴力并查集,而每次查 ...

  5. 【题解】Luogu P2147 [SDOI2008]洞穴勘测

    原题传送门 这题用Link-Cut-Tree解决,Link-Cut-Tree详解 我不太会踩爆Link-Cut-Tree的并查集做法qaq 我们用Link-Cut-Tree维护连通性(十分无脑) Co ...

  6. bzoj2049 [Sdoi2008]Cave 洞穴勘测

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

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

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

  8. [SDOI2008]Cave 洞穴勘测

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

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

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

最新文章

  1. 自己开发开源jquery插件--给jquery.treeview加上checkbox
  2. DNS报文格式(RFC1035)
  3. Android studio如何使用SVN进行版本控制?
  4. NYOJ 14 会场安排问题
  5. springframework包下的RequestContextHolder类和ServletRequestAttributes类的源码和使用
  6. opengl绘制长方体线框_OpenGL绘制长方体
  7. JBoss BRMS复杂事件处理(CEP)性能基准
  8. 教你如何进入有密码的 XP 系统(下)
  9. python字符串查找的四种方法_Python中的字符串查找操作方法总结
  10. (10)Microsoft office Word 2013版本操作入门_word表格
  11. android 获取全局context,说说 Android 中如何在全局获取 Context
  12. Java匹马行天下之C国程序员的秃头原因
  13. 驱动兼容_「图」英特尔DCH驱动新版发布:重点修复Windows 10兼容性问题
  14. 【雷达】一维和二维自适应波束形成(DBF))DBF附matlab代码
  15. oracle c# 插入中文乱码,C#写入Oracle 中文乱码问题
  16. er图转关系模式规则_ER模型到关系模型的转换规则
  17. 周杰伦新专辑预售热点传播渠道分析
  18. 阿里云-云开发平台普及篇——创建应用
  19. Android原生OS风格ROM包,小米5S 的LineageOS14.1刷机包 安卓7.1.1原生风格 20180203更新...
  20. Python数据可视化的3大步骤!

热门文章

  1. 减少系统进程【ZT】
  2. cpp 条件判断 大于等于_07.合意就执行,不行就拉倒-if/else条件控制(一)
  3. go sublime mysql_Sublime text 3开发GO
  4. [Es] Rejecting mapping update to [xxx] as the final mapping would have more than 1 type [xxx xxx]
  5. 【Elasticsearch】Elasticsearch 集群健康值黄色 解决方案 或者 分片 未分配
  6. 【Docker】elasticsearch 监控工具 elasticsearch-HQ Unable to create connection to: http://localhost:9200
  7. 【Flink】Flink 与数据库的集成最佳实践 【视频笔记】
  8. 【MyBatis】Mybatis使用SqlSessionFactory加载xml文件
  9. MySQL : mysql连接报 Communications link failure
  10. 95-140-108-源码-transform-算子process