题面
题意是给你一棵树,在每个时刻标记一个点,或者问一条路径有多少个点在C时间前被标记了及路径长度。

这题好在可以离线,按时间排序后就取消了时间限制,操作变成标记一个点,询问就是问一条路径有几个点被标记了及路径长度。不会LCA,歧视树剖的我就水了棵LCT。

单点标记就把该点Splay到根,然后标记。
路径询问就分别Evert和Access两个端点,把路径放到一棵Splay上,在根上就可以得到这条路径的信息了。

#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <ctime>
#include <cstdio>
#include <cstdlib>
#include <cstring>using namespace std;
#define mmst(a, b) memset(a, b, sizeof(a))
#define mmcp(a, b) memcpy(a, b, sizeof(b))typedef long long LL;const int N=200100;int n,cnt,m;
int ans[N],len[N];struct yy
{int ops,num,tim,u,v;
}f[N];bool cmp(yy x,yy y)
{if(x.tim==y.tim)return x.ops>y.ops;return x.tim<y.tim;
}struct tree
{tree *c[2],*f,*pp;int a,sum,siz;bool flip;int d(){return f->c[1]==this;}void sc(tree *x,int d){(c[d]=x)->f=this;}
}nil[N],*ro[N];tree *newtree()
{nil[++cnt]=nil[0];nil[cnt].siz=1;return nil+cnt;
}void up(tree *x)
{x->sum=x->a+x->c[0]->sum+x->c[1]->sum;x->siz=x->c[0]->siz+x->c[1]->siz+1;
}void down(tree *x)
{if(!x->flip)return;swap(x->c[0],x->c[1]);if(x->c[0]!=nil)    x->c[0]->flip^=1;if(x->c[1]!=nil)    x->c[1]->flip^=1;x->flip=0;
}void work(tree *x)
{if(x->f!=nil)work(x->f);down(x);
}void zig(tree *x)
{tree *y=x->f;int d=x->d();y->sc(x->c[!d],d);if(y->f==nil)x->f=nil;elsey->f->sc(x,y->d());x->sc(y,!d);up(y);up(x);x->pp=y->pp;y->pp=nil;
}void splay(tree *x)
{work(x);for(tree *y;x->f!=nil;){y=x->f;if(y->f!=nil)(x->d() ^ y->d()) ? zig(x) : zig(y);zig(x);}
}void Access(tree *x)
{tree *y=nil;while(x!=nil){splay(x);if(x->c[1]!=nil){x->c[1]->f=nil;x->c[1]->pp=x;}x->c[1]=y;if(y!=nil)y->f=x;up(x);y->pp=nil;y=x;x=x->pp;}
}void Evert(tree *x)
{Access(x);splay(x);x->flip^=1;
}int main()
{nil->c[0]=nil->c[1]=nil->f=nil->pp=nil;cin>>n;for(int i=1;i<=n;i++)ro[i]=newtree();for(int i=1;i<=n;i++){int x;scanf("%d",&x);if(x)ro[i]->pp=ro[x];}cin>>m;for(int i=1;i<=m;i++){f[i].num=i;scanf("%d",&f[i].ops);if(f[i].ops==2){scanf("%d",&f[i].u);f[i].tim=i;}else{scanf("%d%d%d",&f[i].u,&f[i].v,&f[i].tim);f[i].tim=i-f[i].tim-1;}}sort(f+1,f+m+1,cmp);for(int i=1;i<=m;i++){if(f[i].ops==2){splay(ro[f[i].u]);ro[f[i].u]->a=1;up(ro[f[i].u]);}else{Evert(ro[f[i].u]);Access(ro[f[i].v]);splay(ro[f[i].v]);ans[f[i].num]=ro[f[i].v]->sum;len[f[i].num]=ro[f[i].v]->siz;}}for(int i=1;i<=m;i++)if(len[i])printf("%d %d\n",len[i],ans[i]);return 0;
}

bzoj4448(LCT)相关推荐

  1. Query on a tree(LCT版)

    文章目录 题目 分析 代码 题目 Query on a tree 分析 动态树(LCT)初探 代码 #include<cstdio> #include<vector> #inc ...

  2. BZOJ 4817: [Sdoi2017]树点涂色(LCT+树剖+线段树)

    题目描述 Bob有一棵 nn 个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同. 定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. Bob ...

  3. BZOJ5212 ZJOI2018历史(LCT)

    首先相当于最大化access的轻重边交换次数. 考虑每个点作为战场(而不是每个点所代表的国家与其他国家交战)对答案的贡献,显然每次产生贡献都是该点的子树内(包括自身)此次access的点与上次acce ...

  4. 洛谷3613睡觉困难综合征(LCT维护链信息(前后缀)+贪心)

    这个题目还是很好啊QWQ很有纪念意义 首先,如果在序列上且是单次询问的话,就是一个非常裸的贪心了QWQ这也是NOI当时原题的问题和数据范围 我们考虑上树的话,应该怎么做? 我的想法是,对于每一位建一个 ...

  5. AHOI2005航线规划 bzoj1969(LCT缩点)

    题目描述 对Samuel星球的探险已经取得了非常巨大的成就,于是科学家们将目光投向了Samuel星球所在的星系--一个巨大的由千百万星球构成的Samuel星系. 星际空间站的Samuel II巨型计算 ...

  6. bzoj 4736: 温暖会指引我们前行 (LCT 维护最大生成树)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4736 题面: 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出 ...

  7. CF1192B Dynamic Diameter(LCT)

    Foreword\text{Foreword}Foreword @zhengrunzhe 大佬的矩阵做法过于神奇,蒟蒻无法理解- 欧拉序的做法确实非常巧妙,但我也想不到这么神仙的做法- 提供一种可能简 ...

  8. 洛谷P4219 大融合(LCT、虚子树)

    解析 本题需要用LCT维护子树大小 然后我就不会了 然后我就用树剖水过去了 又快又好写,真香 现在详细聊聊如何用LCT维护子树信息 每个结点再定义一个新的变量记录所有虚儿子的信息 然后-完了? 告别盲 ...

  9. YBTOJ洛谷P2387: 魔法森林(LCT)

    解析 LCT从板子到算法的入门题吧 有一些不知道的很实用的技巧 把边按a排序从小到大加入边 那么我们只需要维护当前1-n路径上的b的最小值即可 如果这条边两端点本来不连通,就直接link 否则找到路径 ...

  10. 模板:Link Cut Tree(LCT)

    文章目录 前言 解析 原理 rotate(x) splay(x) access(x) findroot(x) makeroot(x) split(x,y) link(x,y) cut(x,y) pus ...

最新文章

  1. ubuntu下打开matlab_ubuntu终端命令启动matlab方法
  2. nginx的list数据结构
  3. 资深美术分享:游戏开发如何确定画风?
  4. 企业网站前端制作实战教程 JQuery CSS JS HTML 项目需求分析与准备工作
  5. 以TikTok为切入的海外流量打法?
  6. python爬虫微信公众号视频
  7. 考研英语七附双语阅读:编程玩具——程序员培养从娃娃抓起
  8. nginx处理redirect location端口丢失的问题
  9. 探索分布式服务框架Dubbo开篇:牛逼哄哄的RPC
  10. 程序员如何选择未来的职业路线
  11. Halide示例学习五
  12. canvas绘制图像轮廓效果
  13. 威力曲面sw2020_威力曲面插件(SolidWorks曲面设计助手)V6.1 正式版
  14. windows10修复引导
  15. 大牛手把手教你!Service有几种启动方式?吐血整理
  16. 2018年python就业现状_2018年Python就业形势分析 拿数据说话
  17. thinkpad分区win10_win10系统联想笔记本显示隐藏的分区的还原技巧
  18. java代码固定电话判断,Java 固话和手机归属地判断
  19. 泡泡机器人SLAM公开课链接(实时更新中)
  20. Java中关于字符串特别有意思的事

热门文章

  1. 沪深股票的复权计算(复权因子的应用)
  2. 椭圆形建筑——逸夫演艺中心
  3. 1843. 圆形牛棚
  4. Thinkpad E430C 跳过电池检测更新bios
  5. 二本b类大学计算机专业,位于广东的二本B类大学有哪些?
  6. IP被封检测和端口被封检测方法分享
  7. 各种手机处理器排行榜_手机处理器CPU性能排名
  8. Graphene-SGX 总结
  9. w3wp.exe进程来调试web应用程序
  10. 推箱子游戏(图形版)