Link-Cut-Tree的模板题啊......(听说还可以用其他的方法做,不管了,直接上LCT)

没有要求维护点权,只需要维护点的连通性即可。

就是朴素的LCT,居然还不要pushup。

感觉有些不适应啊.......不得不说LCT是个神器。

简单分析一下。

  • 对于每种命令:

    • 如果是Connect x y (链接 x y):直接 link(x,y)即可。

    • 如果是Destroy x y (切断 x y):直接 cut(x,y)即可。

    • 如果是Query x y (询问 x y 的连通性):判断findroot(x)findroot(y)是否一致,一致输出Yes,否则输出No

然后就A了.......

Code:

#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
#define RI register int
#define A printf("A")
#define C printf(" ")
using namespace std;
const int N=2e5+2;
template <typename Tp> inline void IN(Tp &x){int f=1;x=0;char ch=getchar();while(ch<'0'||ch>'9')if(ch=='-')f=-1,ch=getchar();while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();x*=f;
}int n,m,f[N],r[N],hep[N],ch[N][2];
inline int chk(int x){return ch[f[x]][1]==x;}
inline int get(int x){return ch[f[x]][0]==x||ch[f[x]][1]==x;}
inline void filp(int x){swap(ch[x][0],ch[x][1]);r[x]^=1;}
inline void pushdown(int x){if(!r[x])return;r[x]=0;if(ch[x][0])filp(ch[x][0]);if(ch[x][1])filp(ch[x][1]);
}
inline void rotate(int x){int y=f[x],z=f[y],k=chk(x),&v=ch[x][!k];if(get(y))ch[z][chk(y)]=x;v=y,ch[y][k]=v;if(v)f[v]=y;f[y]=x,f[x]=z;return;
}
inline void Splay(int x){int y=x,top=0;hep[++top]=y;while(get(y))hep[++top]=y=f[y];while(top)pushdown(hep[top--]);while(get(x)){y=f[x],top=f[y];if(get(y))rotate((ch[y][0]==x)^(ch[top][0]==y)?x:y);rotate(x);}return;
}
inline void Access(int x){for(register int y=0;x;x=f[y=x])Splay(x),ch[x][1]=y;
}
inline void makeroot(int x){Access(x);Splay(x);filp(x);
}
inline int findroot(int x){Access(x);Splay(x);while(ch[x][0])pushdown(x),x=ch[x][0];return x;
}
inline void split(int x,int y){makeroot(x);Access(y);Splay(y);
}
inline void link(int x,int y){makeroot(x);if(findroot(y)!=x)f[x]=y;
}
inline void cut(int x,int y){makeroot(x);if(findroot(y)==x&&f[x]==y&&!ch[x][1]){f[x]=ch[y][0]=0;}return;
}char op[10];
int main(){scanf("%d%d",&n,&m);for(register int x,y,i=1;i<=m;++i){scanf("%s%d%d",op,&x,&y);if(op[0]=='C')link(x,y);else if(op[0]=='D')cut(x,y);else if(op[0]=='Q'){if(findroot(x)==findroot(y))printf("Yes\n");else printf("No\n");}   }return 0;
}

转载于:https://www.cnblogs.com/K-Qiuly/p/10273906.html

题解 洛谷P2147/BZOJ2049【[SDOI2008]洞穴勘测】相关推荐

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

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

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

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

  3. 题解 洛谷P1365 WJMZBMR打osu! / Easy

    题解 洛谷P1365 WJMZBMR打osu! / Easy Date 2019.7.28 题目大意 给出一个长度为n的由o,x,?组成的字符串,对于每连续的a个o,就有a2分.同时,对于任意的?,有 ...

  4. bzoj2049 Cave 洞穴勘测 LCT模版

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

  5. python刷题 NOI题库 python题解 洛谷、牛客网、AcWing 刷题等

    NOI题库 python题解-2022.01.07整理(1.1-1.3) NOI题库 python题解-2022.01.07整理(1.1-1.3)_dllglvzhenfeng的博客-CSDN博客 N ...

  6. 题解 洛谷P4473 【[国家集训队]飞飞侠】

    这道题今天我们考试考到了,第三题,最后只剩半小时了,随便打了个暴搜,最后竟然还没调完QAQ,我竟然连暴力都不会打了 咳咳,不扯了,下面开始说这道题的做法 由于N和M都不大于150最容易想到的是Floy ...

  7. 题解 洛谷 P4042 [AHOI2014/JSOI2014]骑士游戏

    洛谷P4042[AHOI2014/JSOI2014]骑士游戏\color{#00F}{洛谷\ P4042\ [AHOI2014/JSOI2014]骑士游戏}洛谷 P4042 [AHOI2014/JSO ...

  8. 题解 洛谷 P3069 [USACO13JAN]牛的阵容Cow Lineup

    洛谷P3069[USACO13JAN]牛的阵容CowLineup\color{#00F}{洛谷\ P3069\ [USACO13JAN]牛的阵容Cow Lineup}洛谷 P3069 [USACO13 ...

  9. 题解洛谷1179数字统计 记录问题

    文章目录 数字统计 一.思路1 二.思路二 优化 1.想法 2.代码 二.继续优化 不用类型转换 总结 数字统计 题目描述 请统计某个给定范围[L, R][L,R]的所有整数中,数字 22 出现的次数 ...

最新文章

  1. CSRF verification failed. Request aborted. 表单提交方法为POST时的报错
  2. 通过apt自动生成建造者模式单线程版代码(二)
  3. ubuntu较快台湾源
  4. 服务降级和服务熔断的区别_Spring Cloud 熔断 隔离 服务降级
  5. java获取ua浏览器指纹_头条:如何获取浏览器指纹信息
  6. 计算机网络系统容错检测,计算机系统的容错技术方法
  7. 低情商大神的思维,高情商的你会懂么?为什么很多计算机老师都是坏脾气?为什么提问没人回答?为什么要通过网络自主学习?
  8. DNS(BIND) 正向解析   反向解析 基本服务的搭建
  9. solr5.3.1 mysql_Solr-5.3.1 dataimport 导入mysql数据
  10. nifi执行linux命令log,shell - 无法使用Nifi curl命令启动处理器 - SO中文参考 - www.soinside.com...
  11. 翻译: swift5 iOS中的自动布局教程:Auto Layout入门
  12. 【Hoxton.SR1版本】Spring Cloud Gateway之Predicate详解
  13. 开心网游戏界面Html
  14. 因子分析累计贡献率_数据分析之因子分析
  15. CMake file命令参数GLOB和GLOB_RECURSE
  16. matlab符号函数subs,什么是matlab subs函数?
  17. 如何成为一名获得 Adobe 国际认证的专业设计师?
  18. 高级筛选英语或计算机分数大于85,WPS:如何在WPS中高级筛选分析学生成绩?
  19. 手游沙巴克传奇当前服务器维护,《沙巴克传奇》12月18日安卓、IOS维护公告
  20. grpc原理及四种实现方式

热门文章

  1. k8s kubectl生成kube-config文件
  2. 为什么实际频率只有1.8G的AMD 2500+处理器运行速度比实际频率2.4G的P4-2.4B还快
  3. java 蓝桥杯算法提高 字符串匹配(题解)
  4. android手机分享app,Android Pie如何快捷分享文件至特定App
  5. 浅谈ARMv8-A系列CPU的架构
  6. 分布式选举协议:Paxos
  7. Checksum 校验和
  8. FPGA状态机三段式
  9. php 走马灯轮播,Vue.js轮播图走马灯代码实例(全)
  10. hive使用适用场景_Hive 中 Map Join 的适用场景:非等值连接