CF13E Holes LCT
CF13E Holes
双倍经验题,几乎同[HNOI2010]弹飞绵羊,LCT练手题,LG没有LCT题解于是发一波。
从当前点向目标点连边,构成一棵树,带修改就用LCT动态维护答案,由于不用查询修改链上信息,不需要与makeroot有关的函数。分块也可以写。
不会LCT的话可以看看我的LCT总结。
#include<cstdio>
#include<cctype>
#define R register
#define I inline
using namespace std;
const int S=100003;
char buf[1000000],*p1,*p2;
I char gc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,S,stdin),p1==p2)?EOF:*p1++;}
I int rd(){
R int f=0; R char c=gc();
while(c<48||c>57) c=gc();
while(c>47&&c<58) f=f*10+(c^48),c=gc();
return f;
}
struct splay{int p,d[2],s;}e[S];
I int min(int x,int y){return x<y?x:y;}
I int nrt(int x){return e[e[x].p].d[0]==x||e[e[x].p].d[1]==x;}
I void psu(int x){e[x].s=e[e[x].d[0]].s+e[e[x].d[1]].s+1;}
I void rtt(int x){
R int f=e[x].p,g=e[f].p,b=e[f].d[0]==x,c=e[x].d[b];
if(nrt(f)) e[g].d[e[g].d[1]==f]=x;
if(c) e[c].p=f;
e[x].p=g,e[f].p=x,e[x].d[b]=f,e[f].d[!b]=c,psu(f);
}
I void spl(int x){
for(R int f,g;nrt(x);rtt(x)){
f=e[x].p,g=e[f].p;
if(nrt(f))
rtt((e[g].d[1]==f)^(e[f].d[1]==x)?x:f);
}
psu(x);
}
I void acc(int x){
for(R int y=0;x;x=e[y=x].p)
spl(x),e[x].d[1]=y,psu(x);
}
I void cut(int x){acc(x),spl(x),e[e[x].d[0]].p=0,e[x].d[0]=0,psu(x);}
I int frt(int x){
acc(x),spl(x);
while(e[x].d[0])
x=e[x].d[0];
return x;
}
int main(){
R int n=rd(),m=rd(),i,x,y,z;
for(i=1;i<=n;++i){
x=rd(),z=i+x;
if(z<=n)
e[i].p=z;
}
for(i=1;i<=m;++i){
x=rd(),y=rd();
if(x)
printf("%d ",frt(y)),printf("%d\n",e[y].s);
else{
x=rd(),cut(y),z=x+y;
if(z<=n)
e[y].p=z;
}
}
return 0;
}
CF13E Holes LCT的更多相关文章
- 题解 CF13E 【Holes】
这个题和$P3203\ $弹飞绵羊基本上完全一致 我的做法是用\(LCT\)维护信息,开一个节点\(fly\),表示到此节点时,小球会弹飞,那么查询弹多少次即为\(siz[fly]-1\) 最后一次落 ...
- 一堆LCT板子
搞了一上午LCT,真是累死了-- 以前总觉得LCT高大上不好学不好打,今天打了几遍感觉还可以嘛= =反正现在的水平应付不太难的LCT题也够用了,就这样好了,接下来专心搞网络流. 话说以前一直YY不出来 ...
- 动态树之LCT(link-cut tree)讲解
动态树是一类要求维护森林的连通性的题的总称,这类问题要求维护某个点到根的某些数据,支持树的切分,合并,以及对子树的某些操作.其中解决这一问题的某些简化版(不包括对子树的操作)的基础数据结构就是LCT( ...
- 在此为LCT开一个永久的坑
其实我连splay都还不怎么会. 今天先抄了黄学长的bzoj2049,以后一定要把它理解了. 写LCT怎么能不%数据结构大神yeweining呢?%%%chrysanthemums %%%切掉大森林 ...
- 【BZOJ2157】旅游 LCT
模板T,SB的DMoon..其实样例也是中国好样例...一开始不会复制,yangyang:找到“sample input”按住shift,按page down.... #include <ios ...
- 【BZOJ3669】[Noi2014]魔法森林 LCT
终于不是裸的LCT了...然而一开始一眼看上去这是kruskal..不对,题目要求1->n的路径上的每个点的两个最大权值和最小,这样便可以用LCT来维护一个最小生成路(瞎编的...),先以a为关 ...
- 【BZOJ1180】: [CROATIAN2009]OTOCI & 2843: 极地旅行社 LCT
竟然卡了我....忘记在push_down先下传父亲的信息了....还有splay里for():卡了我10min,但是双倍经验还是挺爽的,什么都不用改. 感觉做的全是模板题,太水啦,不能这么水了... ...
- 【BZOJ3282】Tree LCT
1A爽,感觉又对指针重怀信心了呢= =,模板题,注意单点修改时splay就好,其实按吾本意是没写的也A了,不过应该加上能更好维护平衡性. ..还是得加上好= = #include <iostre ...
- BZOJ2888 资源运输(LCT启发式合并)
这道题目太神啦! 我们考虑他的每一次合并操作,为了维护两棵树合并后树的重心,我们只好一个一个的把节点加进去.那么这样一来看上去似乎就是一次操作O(nlogn),但是我们拥有数据结构的合并利器--启发式 ...
随机推荐
- 执行SQL的DbHelperSQL
using System; using System.Collections; using System.Collections.Specialized; using System.Data; usi ...
- [UI] 精美UI界面欣赏[11]
精美UI界面欣赏[11]
- mysql 8.0.11 安装(windows)
mysql本地安装(windows) 一.安装包下载 从官网下载安装包,地址:https://dev.mysql.com/downloads/mysql/ 二.配置 解压到本地,然后在目录下新建my. ...
- Linux 系统的磁盘分区_【all】
磁盘的存储逻辑结构 1.主引导扇区(446+64+2) MBR(主引导记录)0磁头0磁道的第一扇区 446字节 -->存放系统的引导程序,同Windows 剩下的64字节,分区表(每个分区16字 ...
- 【原创】使用Java进行Clob转String字符串
背景 oracle字段类型varchar2最大长度4000,超过的怎么办 解决 使用clob类型,大字段,无长度限制 问题 使用Java的JDBC读取的RS获取的clob类型无法正常使用,封装的rs. ...
- 预估高并发下API服务器数量
我的主要工作就是API的编写,应该关注API的响应时间,以及并发时候的响应.那么如何测试API响应时间,以及预计高并发服务器压力呢? 从访问日志开始查起. 1 首先统计API每日访问总数.举例假设某个 ...
- CORS跨域模型浅析及常见理解误区分析
CORS跨域资源共享是前后端跨域十分常用的一种方案,主要依赖Access-Control-Allow(ACA)系列header来实现一种协商性的跨域交互. 基本模型 其中的具体流程大致可以分为以下几步 ...
- AOP-通知-笔记
说到AOP肯定会想到切面.通知.切点等等.那什么是通知呢?之前我一直以为我们所说的通知就是我们写在切面中的方法,但是随着AOP认识的加深,现在发现所谓的通知不仅仅是我们写在切面中的方法,通知方法只是通 ...
- SOJ 4583 动态规划之分组背包
Description Sidney想去Gandtom家玩.但Sidney家和Gandtom家之间是高低不平.坑坑洼洼的土路.所以他需要用他的背包装几袋稀的泥,在路上铺平一些干的土,使路变成平整的泥土 ...
- MySQL无法存储Emoji表情问题
数据插入的时候报错: 1366 - Incorrect string value: '\xF0\x9F\x98\x81' for column 'job' at row 23 解决办法: 1.修改配置 ...