洛谷P4271:New Barns P(倍增)(LCT)(直径)

解析

倍增真香

关键性质:树上距离一个点最远的点必定是直径两端点其一。
本题限制好,要求少动态维护倍增数组暴力维护直径即可。
如果每次合并的是两棵树,而不是一棵树加一个点,可以先离线下来,照样能做。
如果每次强制在线,用LCT算距离即可(split出来后splay大小减1)。
如果还要支持删边,需要维护一个 fxf_xfx 表示 xxxsplay子树内深度最浅的结点真实子树内深度最大的结点深度。(深度均指真实深度)
转移:
flsx→fxf_{ls_x}\to f_xflsxfx
sizlsx+frsx→fxsiz_{ls_x}+f_{rs_x}\to f_xsizlsx+frsxfx
flsx+heapx.top()→fxf_{ls_x}+heap_x.top()\to f_xflsx+heapx.top()fx
最后一个是用堆维护虚子树内所有的 fsonf_{son}fson,然后用最大的堆顶转移。
为了支持 reversereversereverse 操作,还需要维护一个 gxg_xgx 表示 xxxsplay子树内深度最深的结点往上延伸深度最大的结点深度,把转移式所有左右儿子互换即可。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define ok debug("OK\n")
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
const int N=1e5+100;
const int M=2e4+100;
const int inf=1e9;int n,tot;int pl[N][20],dep[N];
int fa[N],u[N],v[N],d[N];
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);
}
char c;
int x;
inline int Lca(int x,int y){if(dep[x]<dep[y]) swap(x,y);for(int k=17;k>=0;k--){if(dep[pl[x][k]]>=dep[y]) x=pl[x][k];}if(x==y) return x;for(int k=17;k>=0;k--){if(pl[x][k]==pl[y][k]) continue;x=pl[x][k];y=pl[y][k];}return pl[x][0];
}
inline int dis(int x,int y){int lca=Lca(x,y);return dep[x]+dep[y]-2*dep[lca];
}
signed main(){#ifndef ONLINE_JUDGE//freopen("a.in","r",stdin);//freopen("a.out","w",stdout);#endifn=read();while(n--){scanf(" %c%d",&c,&x);if(c=='B'){int now=++tot;if(x==-1) x=0;pl[now][0]=x;for(int k=1;pl[now][k-1];++k) pl[now][k]=pl[pl[now][k-1]][k-1];dep[now]=dep[x]+1;if(x){int o=find(x),tmp(0);fa[now]=o;if((tmp=dis(now,u[o]))>d[o]){v[o]=now;d[o]=tmp;}if((tmp=dis(now,v[o]))>d[o]){u[o]=now;d[o]=tmp;}}else{fa[now]=now;u[now]=v[now]=now;d[now]=0;}}else{int o=find(x);printf("%d\n",max(dis(u[o],x),dis(v[o],x)));}}return 0;
}
/*
10 10
1 8 5
1 6 5
1 7 9
1 4 2
1 3 4
1 4 2
1 6 3
1 4 1
1 7 1
1 8 4
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HDU 5510 Bazinga

HDU 5510 Bazinga 题意&#xff1a; 依次给你n个字符串&#xff0c;让你找到编号最大的字符串&#xff0c;存在一个比他编号小的字符串且不是其子串 题解&#xff1a; string中有find查找功能&#xff0c; 思路是用一个vector来存之前所有字符串&#xff0c;数组book用来表…

微软发布 Visual Studio 2019年第二季度路线图

微软近日发布了 Visual Studio 2019 年第二季度的路线图&#xff0c;路线图介绍了目前 VS 致力于在 VS 2019 发布的一些重要功能。官方表示&#xff0c;Visual Studio 2019 将继续按照 Visual Studio 发行周期流程提供更新&#xff0c;也就是约每 6 周推出一次次要更新&#xf…

Educational Codeforces Round 107 (Rated for Div. 2) 题解

文章目录A. Review SiteB. GCD LengthC. Yet Another Card DeckD. Min Cost StringE. Colorings and DominoesF. ChainwordG. Chips on a BoardEducational-Round-107A. Review Site 都给了两台机子&#xff0c;直接把所有只会投②的扔到一台&#xff0c;其余的全是另一台 就…

李争——一个骨子里是极客的程序员

我的业余作品《IT 英雄传》&#xff0c;聚焦身边的英雄&#xff0c;以文字采访的形式记录奇人趣事&#xff0c;笑看风云变幻。所写的人都是我见过面且比较熟悉的&#xff0c;绝大部分都是交往很久的&#xff0c;其中为了避嫌&#xff0c;我很少写微软同事&#xff0c;但今天这一…

Pagodas HDU - 5512

Pagodas HDU - 5512 题意&#xff1a; 一开始给你两个数a和b&#xff0c;你可以得到c通过&#xff0c;cab&#xff0c;或者ca-b&#xff0c;你所能得到的数的范围是1~n&#xff0c;两个人轮流操作&#xff0c;当有一方无法操作时&#xff0c;另一方获胜 题解&#xff1a; c…

期望学习笔记

前言 突然发现自己没有系统学过期望。 做一本通的时候是从二分图开始听的课&#xff0c;dp这一章只是四处搜题解而已。 做期望题基本都是靠玄学和《感性理解》 都是很简单的东西&#xff0c;但系统很重要&#xff0c;该补的还是要补的。 期望的基本性质 E(c)cE(c)cE(c)cE(cx)…

仅此一文让你明白事务隔离级别、脏读、不可重复读、幻读

网络上关于这方面的博文有些偏理论&#xff0c;有些通篇代码&#xff0c;都不能深入浅出。本文用图文并茂的方式&#xff0c;配上行云流水般的代码&#xff0c;非要摆清楚这个问题。相关代码已提交至码云&#xff08;点击这里下载&#xff09;。事务是现代关系型数据库的核心之…

[AtCoder Regular Contest 123] 题解

文章目录A - Arithmetic SequenceB - Increasing TriplesC - 1, 2, 3 - DecompositionD - Inc, Dec - DecompositionE - TrainingF - Insert AdditionARC123A - Arithmetic Sequence 大讨论 只能111&#xff0c;先固定中间的数&#xff0c;看两边加谁&#xff0c;如果都是加负…

2.5:模拟总结

文章目录前言考场题目解析T1T2T3总结代码T1T2T3前言 50pts 30020 rnk19 … 把1000ms看成10s我也真是个人才。 T3自然溢出50带模数T成20有点离谱。 但倒没有因为WA失分。 就是菜罢了 考场 这次时间管理还是比较合理的。 乍看三题觉得T1似乎是个伞兵题 这离线下来可持久化数组…

Meeting HDU - 5521

Meeting HDU - 5521 题意&#xff1a; 一共有n个点&#xff0c;有m个块&#xff0c;每个块内有Si个点&#xff0c;块内点彼此到达费用为wi&#xff0c;两个人分别位于1和n号块&#xff0c;两者同时出发问最短时间遇到是多少&#xff1f;在哪些地方可以遇到&#xff1f; ΣSi&…

2.6模拟总结

前言 45pts 4500 rnk 34 写了200分&#xff0c;挂了155分 好哇&#xff01; 考场 这次状态还真是挺不错的。 开考&#xff0c;先看题。 T1期望&#xff0c;乍一看看不出来啥&#xff0c;似乎挺难的。 T2乍一看特别可做。 T3脑子里只有模拟退火 先去看T2。 被这种类似的题惯…

牛客IOI周赛26-提高组(逆序对,对序列,未曾设想的道路) 题解

文章目录逆序对对序列未曾设想的道路牛客IOI周赛26-提高组逆序对 这种套路之前已经见过几次了&#xff0c;肯定不是模拟操作数列 opt 1 对于i∈[1,l)⋃(r,n]i∈[1,l)\bigcup(r,n]i∈[1,l)⋃(r,n] 逆序对是不影响的 对于i∈(l,r)i∈(l,r)i∈(l,r) 与l/rl/rl/r的情况会反转&…

Frogs HDU - 5514

Frogs HDU - 5514 题意&#xff1a; 有n个青蛙&#xff0c;第 i 个青蛙每次只能够跳 ai​步&#xff0c;现在有m个石头围成一圈&#xff0c;编号为0到m−1&#xff0c;现在青蛙可以围着这个石头组成的圆跳无限次&#xff0c;每跳一次就会占领这个石头&#xff0c;可以无限占领…

Docker最全教程之树莓派和Docker(十六)

前言树莓派&#xff08;Raspberry Pi&#xff09;是一台卡片电脑&#xff08;只有信用卡大小&#xff09;&#xff0c;我们可以使用树莓派做很多事情&#xff0c;比如智能家居的中控、航空器、BT下载器、挖矿机、智能机器人、小型服务器&#xff08;花生壳网站&#xff09;等等…

Codeforces Round #724 (Div. 2) 题解

文章目录A. Omkar and Bad StoryB. Prinzessin der VerurteilungC. Diluc and KaeyaD. Omkar and MediansE. Omkar and ForestF. Omkar and Akmar#724-Div.2A. Omkar and Bad Story 直接set暴力加值&#xff0c;加满300300300个为止 #include <cstdio> #include <se…

2015沈阳区域赛

2015沈阳vj链接 题号题目知识点难度APattern StringBBazinga贪心签到题CMinimum Cut-CutDPagodas裴蜀定理签到题EEfficient TreeFFrogs欧拉函数银牌题GGame of Flying CircusHChessboardITriple二维线段树稳银快金JJohn’s FencesKKykneion asmaLNumber LinkMMeeting最短路&am…

模板:Prufer序列

所谓 Prufer 序列&#xff0c;就是 Prufer 发明的序列。 &#xff08;逃&#xff09; 前言 优雅的神奇魔术。 看名字很高大难&#xff0c;但实际上是高大清&#xff08;小清新&#xff09;。 很简单的建立起树与序列之间的双射&#xff0c;且这个序列的性质非常良好&#xff…

【NET CORE微服务一条龙应用】第三章 认证授权与动态权限配置

介绍系列目录&#xff1a;【NET CORE微服务一条龙应用】开始篇与目录在微服务的应用中&#xff0c;统一的认证授权是必不可少的组件&#xff0c;本文将介绍微服务中网关和子服务如何使用统一的权限认证主要介绍内容为&#xff1a;1、子服务如何实现和网关相同的鉴权方式2、接口…

Codeforces Round #725 (Div. 3) 题解

文章目录A. Stone GameB. Friends and CandiesC. Number of PairsD. Another Problem About Dividing NumbersE. Funny SubstringsF. Interesting FunctionG. Gift Set#725-Div.3A. Stone Game 先找到最大值最小值的位置&#xff0c;然后有三种选取&#xff08;两边中走一边/两…

I - Triple HDU - 5517

I - Triple HDU - 5517 题意&#xff1a; 由多重集A和多重集B&#xff0c;<a,b>∈A&#xff0c;<c,d,e>∈B&#xff0c;集合CA * B{<a,c,d>|<a,b>∈A&#xff0c;<c,d,e>∈B and be}。 现在需要你求出有多少个<a,c,d>满足&#xff1a;不…