LINK:





考虑暴力 保存每个版本的父亲 然后暴力向上跳。得分20.

考虑离线 可以离线那么就可以先把树给搞出来 然后考虑求k级祖先 可以倍增求。

如何判断合法 其实要求路径上的边的时间戳<=当前时间戳 这个也可以倍增做。

当然我脑抽了 把询问版本排序后利用并查集判连通性了。

考虑正解:这下就有两个方向了:

一个是倍增数组的问题 容易想到如果倍增数组可以求出 那么问题迎刃而解 倍增数组每个位置最多被更新一次 所以每次暴力判断是否可以更新 递归来做这个事情。

复杂度不太能证明。

还有一个是 如果可以直接求出k级祖先利用可持久化并查集也可以求出答案。

那么这个k级祖先可以利用LCT来求 access之后暴力在splay上跳。可持久化并查集判定。

第二个询问可以二分一下 然后定位 然后判定。复杂度nlog^2.

这个做法非常不优美。

还是考虑 将判定条件转到 路径上的边的出现时间<当前时间来判断。

LCT维护子树内的最大值 就可以直接在LCT上跳了。

k级祖先也是如此 可以直接跳也可以求出来那部分点再跳。

const int MAXN=100010;
int n,m,T,last,len,now;
int c[MAXN][2],f[MAXN],fa[MAXN],mx[MAXN],sz[MAXN],rev[MAXN],v[MAXN];
inline bool pd(int x){return c[f[x]][0]==x||c[f[x]][1]==x;}
IV pushup(int x)
{
sz[x]=sz[l(x)]+sz[r(x)]+1;
mx[x]=max(v[x],max(mx[l(x)],mx[r(x)]));
}
IV rotate(int x)
{
int old=f[x],oldf=f[old],k=c[old][1]==x;
c[old][k]=c[x][k^1];c[x][k^1]=old;
if(pd(old))c[oldf][c[oldf][1]==old]=x;
if(c[old][k])f[c[old][k]]=old;
f[old]=x;f[x]=oldf;pushup(old);
}
IV splay(int x)
{
while(pd(x))
{
int old=f[x];
if(pd(old))rotate(((c[old][1]==x)^(c[f[old]][1]==old))?x:old);
rotate(x);
}
pushup(x);
}
IV access(int x)
{
for(int y=0;x;x=f[y=x])
splay(x),c[x][1]=y,pushup(x);
}
IV LINK(int x,int y)//这里题目中保证了x没有父亲.
{
access(x);
splay(x);
v[x]=now;
fa[x]=f[x]=y;
pushup(x);
}
inline int get_mx(int x,int b)
{
if(mx[x]<=b)return 0;
while(x)
{
if(r(x)&&mx[r(x)]>b)x=r(x);
else
{
if(v[x]>b)return x;
else x=c[x][0];
}
}
return x;
}
inline int get_Kth(int b,int x,int k)
{
access(x);
splay(x);
int w=get_mx(x,b);
access(fa[w]);
splay(x);
++k;
if(sz[x]<k)return 0;
while(x)
{
if(sz[r(x)]>=k)x=r(x);
else
{
if(sz[r(x)]+1==k)return x;
k=k-sz[r(x)]-1;
x=l(x);
}
}
return x;
}
inline int get_dep(int b,int x)
{
access(x);
splay(x);
int w=get_mx(x,b);
access(fa[w]);
splay(x);
return sz[x]-1;
}
int main()
{
freopen("1.in","r",stdin);
//freopen("tree.out","w",stdout);
get(n);get(m);get(T);
rep(1,m,i)
{
int get(op),u,v,b;now=i;
op=(op+T*last)%3;
if(!op)
{
get(u);get(v);
u=(u+T*last)%n+1;
v=(v+T*last)%n+1;
LINK(u,v);
}
if(op==1)
{
get(b);get(u);int get(k);
b=(b+T*last)%m;
u=(u+T*last)%n+1;
k=(k+T*last)%n;
put(last=get_Kth(b,u,k));
}
if(op==2)
{
get(b);get(u);
b=(b+T*last)%m;
u=(u+T*last)%n+1;
put(last=get_dep(b,u));
}
}
return 0;
}

6.18 省选模拟赛 树 倍增 LCT的更多相关文章

  1. 6.18 省选模拟赛 字符串 LCT SAM

    LINK:字符串 看起来很难做 考虑一种暴力 建立SAM后每次查询暴力扫儿子. 期望得分10分.实际得分10分. 另外一种发现每次扫儿子过于暴力 可以每次儿子向上做贡献 每次都暴力向上跳. 期望得分1 ...

  2. 5.29 省选模拟赛 树的染色 dp 最优性优化

    LINK:树的染色 考场上以为这道题要爆蛋了 没想到 推出正解来了. 反正是先写了爆搜的 爆搜最近越写越熟练了 容易想到dp 容易设出状态 f[i][j]表示以i为根的子树内白色的值为j此时黑色的值怎 ...

  3. 4.13 省选模拟赛 树 树形dp 卷积 NTT优化dp.

    考试的时候 看到概率 看到期望我就怂 推了一波矩阵树推自闭了 发现 边权点权的什么也不是. 想到了树形dp 维护所有边的断开情况 然后发现数联通块的和再k次方过于困难. 这个时候 应该仔细观察一下 和 ...

  4. 4.18 省选模拟赛 无聊的计算器 CRT EXBSGS EXLucas

    算是一道很毒瘤的题目 考试的时候码+调了3h才搞定. op==1 显然是快速幂. op==2 有些点可以使用BSGS 不过后面的点是EXBSGS. 这个以前学过了 考试的时候还是懵逼.(当时还是看着花 ...

  5. 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解

    今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...

  6. 18/9/21模拟赛-Updated

    18/9/21模拟赛 期望得分:100:实际得分:0  qwq 拿到题目第一眼,我去,这不是洛谷原题(仓鼠找Sugar)吗 又多看了几眼,嗯,对,除了是有多组数据外,就是原题 然后码码码....自以为 ...

  7. @省选模拟赛03/16 - T3@ 超级树

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 一棵 k-超级树(k-SuperTree) 可按如下方法得到:取 ...

  8. 3.28 省选模拟赛 染色 LCT+线段树

    发现和SDOI2017树点涂色差不多 但是当时这道题模拟赛的时候不会写 赛后也没及时订正 所以这场模拟赛的这道题虽然秒想到了LCT和线段树但是最终还是只是打了暴力. 痛定思痛 还是要把这道题给补了. ...

  9. 省选模拟赛 4.26 T1 dp 线段树优化dp

    LINK:T1 算是一道中档题 考试的时候脑残了 不仅没写优化 连暴力都打挂了. 容易发现一个性质 那就是同一格子不会被两种以上的颜色染.(颜色就三种. 通过这个性质就可以进行dp了.先按照左端点排序 ...

随机推荐

  1. css/html 空格,html空格符的显示、标示方式【html空格代码】

    在html里面空格的话,你直接敲打出来的空格是不可以的,下面将通过html和css中设置显示空格的实现总结: Html中空格 符号 编号 描述      不断行的空白(1个字符宽度), 不换行空格 全 ...

  2. 使用 PostCSS 进行 CSS 处理

    在 Web 应用开发中,CSS 代码的编写是重要的一部分.CSS 规范从最初的 CSS1 到现在的 CSS3,再到 CSS 规范的下一步版本,规范本身一直在不断的发展演化之中.这给开发人员带来了效率上 ...

  3. All elments are null 异常

    问题描述:1.查询的size是1,但是里面的展示All elmemts are null . 因为之前没有遇到过这个问题,所以先百度了一下,发现有字段不对的,resultMap对不上的,我看了一下都是 ...

  4. MySQL Error (Always Continue)

    MySQL Error (Always Continue)   其实大部分error在网上都有对应的解决办法,尤其是对Mysql这种使用范围很广的技术.自己就不为每个error单独发布博客了,仅在这里 ...

  5. HDU 5969 最大的位或 题解

    题目 B君和G君聊天的时候想到了如下的问题. 给定自然数l和r ,选取2个整数\(x,y\)满足\(l <= x <= y <= r\),使得\(x|y\)最大. 其中\(|\)表示 ...

  6. 大致掌握django的功能

    目录 静态文件配置 request对象方法初识 pycharm链接数据库(mysql) django链接数据库(mysql) django orm 字段的增删查改 数据的增删查改 数据的查,改,删 d ...

  7. 阿里云服务器ecs配置之安装jdk(转)

    一.安装环境 操作系统:Centos 7.4 JDK版本:1.8 工具:Xshell5.Xftp5 二.安装步骤 第一步:下载安装包 (官网)链接: 下载适合自己系统的jdk版本,如图:我下载的是64 ...

  8. 数据可视化基础专题(九):Matplotlib 基础(一)坐标相关

    1.前言 图表要素如下图所示 # sphinx_gallery_thumbnail_number = 3 import matplotlib.pyplot as plt import numpy as ...

  9. 李航统计学习方法(第二版)(六):k 近邻算法实现(kd树(kd tree)方法)

    1. kd树简介 构造kd树的方法如下:构造根结点,使根结点对应于k维空间中包含所有实例点的超矩形区域;通过下面的递归方法,不断地对k维空间进行切分,生成子结点.在超矩形区域(结点)上选择一个坐标轴和 ...

  10. python3将字符串unicode转换为中文

    在我们的python使用过程中,可能会遇到这样的情况: 我们得到的中文数据是unicode编码类型的,这在python中是没有问题的,可以直接打印显示为中文. 但是,如果我们需要和其它语言或前端进行交 ...