BZOJ 2049 [SDOI2008]洞穴勘测 (LCT)
题目大意:维护一个森林,支持边的断,连,以及查询连通性
LCT裸题 洛谷P2147传送门
1A了,给自己鼓鼓掌
- #include <cstdio>
- #include <algorithm>
- #include <cstring>
- #define il inline
- #define inf 500000
- #define N 10100
- using namespace std;
- int n,m,tp;
- int stk[N];
- struct LinkCutTree{
- int fa[N],ch[N][],rv[N];
- il int idf(int x){return ch[fa[x]][]==x?:;}
- il void con(int x,int ff,int p){fa[x]=ff,ch[ff][p]=x;}
- il int isroot(int x){return (ch[fa[x]][]!=x&&ch[fa[x]][]!=x)?:;}
- il void rev(int x){swap(ch[x][],ch[x][]),rv[x]^=;}
- il void pushdown(int x)
- {
- if(!rv[x]) return;
- if(ch[x][]) rev(ch[x][]);
- if(ch[x][]) rev(ch[x][]);
- rv[x]=;
- }
- il void rot(int x)
- {
- int y=fa[x];int ff=fa[y];int px=idf(x);int py=idf(y);
- if(!isroot(y)) ch[ff][py]=x;
- fa[x]=ff;con(ch[x][px^],y,px),con(y,x,px^);
- //pushup(y),pushup(x);
- }
- void splay(int x)
- {
- int y=x;stk[++tp]=x;
- while(!isroot(y)){stk[++tp]=fa[y],y=fa[y];}
- while(tp){pushdown(stk[tp--]);}
- while(!isroot(x))
- {
- y=fa[x];
- if(isroot(y)) rot(x);
- else if(idf(y)==idf(x)) rot(y),rot(x);
- else rot(x),rot(x);
- }
- }
- void access(int x){for(int y=;x;y=x,x=fa[x])splay(x),ch[x][]=y;/*pushup(x)*/}
- il void mkroot(int x){access(x),splay(x),rev(x);}
- il void split(int x,int y){mkroot(x),access(y),splay(y);}
- int findrt(int x){access(x),splay(x);while(ch[x][])pushdown(x),x=ch[x][];return x;}
- il void link(int x,int y){mkroot(x);if(findrt(y)!=x)fa[x]=y;}
- il void cut(int x,int y){mkroot(x);if(findrt(y)==x&&fa[x]==y&&!ch[x][])fa[x]=ch[y][]=;/*pushup(y)*/}
- }lct;
- int gint()
- {
- int rett=,fh=;char c=getchar();
- while(c<''||c>''){if(c=='-')fh=-;c=getchar();}
- while(c>=''&&c<=''){rett=(rett<<)+(rett<<)+c-'';c=getchar();}
- return rett*fh;
- }
- int main()
- {
- n=gint(),m=gint();
- int fl,x,y;char str[];
- for(int i=;i<=m;i++)
- {
- scanf("%s",str);
- x=gint(),y=gint();
- if(str[]=='C'){lct.link(x,y);}
- if(str[]=='D'){lct.cut(x,y);}
- if(str[]=='Q'){
- if(lct.findrt(x)==lct.findrt(y))
- printf("Yes\n");
- else printf("No\n");}
- }
- return ;
- }
BZOJ 2049 [SDOI2008]洞穴勘测 (LCT)的更多相关文章
- BZOJ 2049 SDOI2008 洞穴勘测 LCT板子
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2049 题意概述:给出N个点,一开始不连通,M次操作,删边加边,保证图是一个森林,询问两点连 ...
- bzoj 2049 Cave 洞穴勘测(LCT)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud 动态树入门题,不需要维护任何信息. 我用的是splay,下标实现的lct. #in ...
- BZOJ2049[Sdoi2008]洞穴勘测——LCT
题目描述 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴.假如 ...
- 洛谷P2147[SDOI2008]洞穴勘测(lct)
题目描述 辉辉热衷于洞穴勘测. 某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴.假 ...
- [SDOI2008] 洞穴勘测 (LCT模板)
bzoj 2049 传送门 洛谷P2147 传送门 这个大佬的LCT详解超级棒的! Link-Cut Tree的基本思路是用splay的森林维护一条条树链. splay的森林,顾名思义,就是若干spl ...
- [LuoguP2147] [SDOI2008]洞穴勘测 (LCT维护连通性)
题面 传送门:https://www.luogu.org/problemnew/show/P2147 Solution 这题...... 我们可以发现题目要求我们维护一个动态森林,而且只查询连通性.. ...
- 洛谷 P2147 [SDOI2008]洞穴勘测 LCT
Code: #include <cstdio> #include <algorithm> #include <string> #include <cstrin ...
- P2147 [SDOI2008]洞穴勘测(LCT)
P2147 [SDOI2008]洞穴勘测 裸的LCT. #include<iostream> #include<cstdio> #include<cstring> ...
- P2147 [SDOI2008]洞穴勘测
P2147 [SDOI2008]洞穴勘测 思路 没办法,我就是喜欢板子都想发的人 都是基础操作,不多说了 代码 #include <bits/stdc++.h> #define ls ch ...
随机推荐
- 【Linux常见问题总结】
1. 如何设置vim编辑器TAB的缩进量?自己在使用Linux编写Python脚本的时候发现TAB的缩进量总是太长,于是想自己修改下vim编辑器的缩进量. 在/etc/vim/ 文件夹下建立 .vim ...
- Linux菜鸟成长日记 ( Linux 下的 ftp 文件传输协议 )
https://blog.csdn.net/buster_zr/article/details/80244542 FTP FTP 是 File Transfer Protocol (文件传输协议)的英 ...
- base64格式文件下载方法
下载图片时,接口返回的地址是base64格式的文件数据,因为页面需要把base64格式的数据转换为文件,再进行下载: 解决方案: 下载按钮: <el-button type="defa ...
- C#使用 ComboBox 控件
Combox控件是一个下拉选择的控件,再做上位机的时候会经常用到,这里记录一下我是怎么用. 1.拉出一个combox控件 2.控件属性选为不可编辑,可编辑的话,你选择下拉框的内容后可以改下拉框里的内容 ...
- SVN中各种符号箭头含义
黄色感叹号(有冲突): -- 这是有冲突了,冲突就是说你对某个文件进行了修改,别人也对这个文件进行了修改,别人抢在你提交之前先提交了,这时你再提交就会被提示发生冲突,而不允许 你提交,防止你的提交覆盖 ...
- [Design]制作磨砂效果
比较适合运用到网页或者APP的设计当中,推荐过来和飞特的朋友们一起分享学习了,先来看看最终的效果图吧 具体的制作步骤如下:
- HDU 2035 不忍直视的水
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; in ...
- 定时任务为什么不用Timer
在做定时任务的时候,有的同学可能能会用到Timer这个定时任务的辅助类, 可是使用它会有潜在的风险,风险例如以下, (1)时间计算不准确问题 由于Timer是以绝对时间计算定时任务的,会受到系 ...
- 移动端js手指滑动事件初体验
今天在公司遇到做一个移动端手指滑动的效果,刚開始用了swiper.js插件发现效果不好(文字存在模糊效果).后来查了一些资料,自己手写了一个使用原生js写的滑动效果. 以下直接上代码: <!do ...
- Visual Studio2013下Magick++配置方法
声明:本文系作者原创,如需转载请保持文章完整并注明出处(http://blog.csdn.net/u010281174/article/details/52224829). ImageMagick是一 ...