[luogu4114] Qtree1 题解
\(LCT\) 动态维护树上路径最值,典中典了。
时间复杂度 \(O(n\log n)\)。
#include<bits/stdc++.h>
#define fa(x) lct[x].fa
#define fl(x) lct[x].fl
#define mx(x) lct[x].mx
#define val(x) lct[x].val
#define sn(x,i) lct[x].sn[i]
using namespace std;
const int N=20005;
struct node{
int sn[2],fa,fl,mx,val;
}lct[N];int n,tp,st[N];
int check(int x){
return sn(fa(x),0)!=x&&sn(fa(x),1)!=x;
}int chksn(int x){
return sn(fa(x),1)==x;
}void push_up(int x){
mx(x)=max({mx(sn(x,0)),mx(sn(x,1)),val(x)});
}void push_down(int x){
if(!x||!fl(x)) return;
fl(sn(x,0))^=1,fl(sn(x,1))^=1;
swap(sn(x,0),sn(x,1)),fl(x)=0;
}void rotate(int x){
int y=fa(x),z=fa(y),k=chksn(x);
if(!check(y)) sn(z,chksn(y))=x;
fa(x)=z,fa(y)=x,fa(sn(x,1-k))=y;
sn(y,k)=sn(x,1-k),sn(x,1-k)=y;
push_up(y);
}void splay(int x){
st[tp=1]=x;
for(int i=x;!check(i);i=fa(i)) st[++tp]=fa(i);
while(tp) push_down(st[tp--]);
while(!check(x)){
int y=fa(x),z=fa(y);
if(!check(y))
rotate(chksn(x)!=chksn(y)?x:y);
rotate(x);
}push_up(x);
}void access(int x){
for(int i=0;x;i=x,x=fa(x))
splay(x),sn(x,1)=i,push_up(x);
}void mk(int x){
access(x),splay(x),fl(x)^=1;
}void split(int x,int y){
mk(x),access(y),splay(y);
}void cut(int x,int y){
split(x,y),fa(x)=sn(y,0)=0;
}void link(int x,int y){
mk(x),access(y),fa(x)=y;
}int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n;string s;
for(int i=1,x,y;i<n;i++){
cin>>x>>y>>mx(n+i);
val(n+i)=mx(n+i);
link(x,n+i),link(n+i,y);
}while(cin>>s){
if(s=="DONE") return 0;
int x,y;cin>>x>>y;
if(s=="CHANGE") mk(x+n),val(x+n)=y;
else split(x,y),cout<<mx(y)<<"\n";
}return 0;
}
[luogu4114] Qtree1 题解的更多相关文章
- 【luogu P4114 Qtree1】 题解
题目链接:https://www.luogu.org/problemnew/show/P4114 1.把边权转化到点权:选取连接这条边的两个点中较深的一个. 2.查询点到点之间的边权时,要从seg[x ...
- QTree1 【题解】
题目背景 数据规模和spoj上有所不同 题目描述 给定一棵n个节点的树,有两个操作: CHANGE i ti 把第i条边的边权变成ti QUERY a b 输出从a到b的路径中最大的边权,当a=b的时 ...
- QTREE系列题解
打了快一星期的qtree终于打完了- - (其实还有两题改不出来弃疗了QAQ) orz神AK一星期前就虐完QTREE 避免忘记还是简单写下题解吧0 0 QTREE1 题意: 给出一颗带边权树 一个操作 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
随机推荐
- http请求超时, 底层发生了什么?
业务方反应调用接口超时,但是在服务端监控并没有看到5xx异常, 于是我们模拟一下请求超时时发生了什么? 1.openresty模拟长耗时服务端 延迟5s响应 error_log logs/error. ...
- IOS多线程之NSOperation(3)
IOS多线程之NSOperation(3) 操作优先级和服务质量 可以通过QueuePriority属性来设置operation在队列中的执行优先级 public enum QueuePriority ...
- 【Python】【爬虫】爬取小说5000章,遇到的爬虫问题与解决思路
爬虫问题分析 回顾 之前写了一个爬取小说网站的多线程爬虫,操作流程如下: 先爬取小说介绍页,获取所有章节信息(章节名称,章节对应阅读链接),然后使用多线程的方式(pool = Pool(50)),通过 ...
- 【C#】【平时作业】习题-8-异常处理
目录 一.概念题 什么是异常处理? 异常处理的语法结构是什么? finally块有何作用? throw语句有何作用? 二.程序设计 一.概念题 什么是异常处理? 异常是在程序执行期间出现的问题.C# ...
- Qt血的教训/细数Qt开发的各种坑/又爱又恨/欢迎围观留言评论
一.吐槽总结 搞Qt开发十几年了,最初从Qt4.6开始,一直追新到现在的6.7版本,中间经历过无数的血的教训,简直是又爱又恨.其实Qt挺好的,但是还是要忍不住吐槽一下,本人还是希望Qt发展的越来越好, ...
- Android 系统使RNDIS网卡上网
背景说明: 一位台湾客户需要采购一批SIMCOM SIM6600CE模组用于Tinker board2s,需要适配Debain系统和Android系统. 主要修改点: 1.defconfig 增加RN ...
- 搭建springboot web系统
一.集成spring-data-jpa 我在实际项目中使用mybaties居多,但是个人喜欢spring-data-jpa,在 1. 添加依赖 <!-- 数据源依赖 --> <dep ...
- Java方法引用、lambda如何序列化&方法引用与lambda底层原理
系列文章目录和关于我 0.引入 最近笔者使用flink实现一些实时数据清洗(从kafka清洗数据写入到clickhouse)的功能,在编写flink作业后进行上传,发现运行的时候抛出:java.io. ...
- C# HttpClient 流式响应
有些时候需要边请求边显示响应内容: 用httpClient.SendAsync(httpreq, HttpCompletionOption.ResponseHeadersRead); private ...
- Kubernetes kubeadm部署k8s集群
kubeadm是Kubernetes项目自带的及集群构建工具,负责执行构建一个最小化的可用集群以及将其启动等的必要基本步骤,kubeadm是Kubernetes集 ...