树剖裸题?(复习练练手)

 // luogu-judger-enable-o2
#include <bits/stdc++.h>
using namespace std; int n,vis[],size[],dep[],fa[][],val[],wson[],t1,t2,t3,t4,ind;
int tid[],sid[],top[],eg1[],eg2[];
vector <pair<int,int> > g[];
char str[]; void dfs1(int p){
vis[p]=;
size[p]=;
for(int i=;i<g[p].size();i++) {
if(vis[g[p][i].first]==) {
dep[g[p][i].first]=dep[p]+;
fa[g[p][i].first][]=p;
val[g[p][i].first]=g[p][i].second;
dfs1(g[p][i].first);
size[p]+=size[g[p][i].first];
if(size[g[p][i].first]>size[wson[p]])
wson[p]=g[p][i].first;
}
}
} void dfs2(int p){
vis[p]=;
tid[++ind]=p;
sid[p]=ind;
if(wson[p]) {
top[wson[p]]=top[p];
dfs2(wson[p]);
}
for(int i=;i<g[p].size();i++) {
if(vis[g[p][i].first]==) {
top[g[p][i].first]=g[p][i].first;
dfs2(g[p][i].first);
}
}
} void lca_presolve() {
for(int i=;i<=;i++)
for(register int j=;j<=n;j++)
fa[j][i]=fa[fa[j][i-]][i-];
} inline int lca(int p,int q){
if(dep[p]<dep[q]) swap(p,q);
for(register int i=;i>=;i--)
if(dep[fa[p][i]]>=dep[q]) p=fa[p][i];
for(register int i=;i>=;i--)
if(fa[p][i]-fa[q][i]) p=fa[p][i],q=fa[q][i];
if(p-q) p=fa[p][], q=fa[q][];
return max(p,q);
} int a[],sq[]; void pushup(int p) {
a[p]=max(a[p*],a[p*+]);
} void build(int p,int l,int r) {
if(l==r) a[p]=sq[l];
else build(p*,l,(l+r)/), build(p*+,(l+r)/+,r), pushup(p);
} void modify(int p,int l,int r,int pos,int k) {
if(l==r) {
a[p]=k;
sq[pos]=k;
}
else {
if(pos<=(l+r)/) modify(p*,l,(l+r)/,pos,k);
else modify(p*+,(l+r)/+,r,pos,k);
pushup(p);
}
} int query(int p,int l,int r,int ql,int qr) {
if(l>qr||r<ql) return ;
if(l>=ql&&r<=qr) return a[p];
return max(query(p*,l,(l+r)/,ql,qr),query(p*+,(l+r)/+,r,ql,qr));
} void readin() {
scanf("%d",&n);
for(int i=;i<n;i++) {
scanf("%d%d%d",&t1,&t2,&t3);
eg1[i]=t1;
eg2[i]=t2;
g[t1].push_back(make_pair(t2,t3));
g[t2].push_back(make_pair(t1,t3));
}
} void init() {
dep[]=;
dfs1();
memset(vis,0x00,sizeof vis);
dfs2();
lca_presolve();
for(int i=;i<=n;i++)
sq[i]=val[tid[i]];
build(,,n);
} void tmodify(int pos,int key){
modify(,,n,sid[pos],key);
} int lquery(int anc,int son) {
int ans=;
while(dep[top[son]]>dep[anc])
ans=max(ans,query(,,n,sid[top[son]],sid[son])),
son=fa[top[son]][];
ans=max(ans,query(,,n,sid[anc]+,sid[son]));
return ans;
} int tquery(int p,int q) {
int l=lca(p,q);
return max(lquery(l,p),lquery(l,q));
} int main(){
readin();
init();
for(int i=;;i++) {
scanf("%s",&str);
if(str[]=='D') return ;
scanf("%d%d",&t2,&t3);
if(str[]=='C') tmodify((dep[eg1[t2]]>dep[eg2[t2]])?eg1[t2]:eg2[t2],t3);
else printf("%d\n",tquery(t2,t3));
}
}

Qtree1 - 树链剖分的更多相关文章

  1. 洛谷 P4114 Qtree1 树链剖分

    目录 题面 题目链接 题目描述 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例: 输出样例: 说明 说明 思路 Change Query AC代码 总结 题面 题目链接 P4114 Qt ...

  2. 洛谷.4114.Qtree1(树链剖分)

    题目链接 模板题都错了这么多次.. //边权赋到点上 树剖模板 //注意LCA.链的顶端不能统计到答案! #include <cstdio> #include <cctype> ...

  3. 树链剖分好(du)题(liu)选做

    1.luogu P4315 月下"毛景树" 题目链接 前言: 这大概是本蒟蒻A掉的题里面码量最大的一道题了.我自认为码风比较紧凑,但还是写了175行. 从下午2点多调到晚上8点.中 ...

  4. BZOJ 3626: [LNOI2014]LCA [树链剖分 离线|主席树]

    3626: [LNOI2014]LCA Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2050  Solved: 817[Submit][Status ...

  5. BZOJ 1984: 月下“毛景树” [树链剖分 边权]

    1984: 月下“毛景树” Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 1728  Solved: 531[Submit][Status][Discu ...

  6. codevs 1228 苹果树 树链剖分讲解

    题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...

  7. 并查集+树链剖分+线段树 HDOJ 5458 Stability(稳定性)

    题目链接 题意: 有n个点m条边的无向图,有环还有重边,a到b的稳定性的定义是有多少条边,单独删去会使a和b不连通.有两种操作: 1. 删去a到b的一条边 2. 询问a到b的稳定性 思路: 首先删边考 ...

  8. 树链剖分+线段树 CF 593D Happy Tree Party(快乐树聚会)

    题目链接 题意: 有n个点的一棵树,两种操作: 1. a到b的路径上,给一个y,对于路径上每一条边,进行操作,问最后的y: 2. 修改某个条边p的值为c 思路: 链上操作的问题,想树链剖分和LCT,对 ...

  9. 树链剖分+线段树 HDOJ 4897 Little Devil I(小恶魔)

    题目链接 题意: 给定一棵树,每条边有黑白两种颜色,初始都是白色,现在有三种操作: 1 u v:u到v路径(最短)上的边都取成相反的颜色 2 u v:u到v路径上相邻的边都取成相反的颜色(相邻即仅有一 ...

随机推荐

  1. 从零构建Flink SQL计算平台 - 1平台搭建

    一.理想与现实 Apache Flink 是一个分布式流批一体化的开源平台.Flink 的核心是一个提供数据分发.通信以及自动容错的流计算引擎.Flink 在流计算之上构建批处理,并且原生的支持迭代计 ...

  2. idea unable to import maven see logs for details

    问题描述 环境IEAD,Maven3.6.2 2019-09-09 17:29:10,751 [ 839683] ERROR - #org.jetbrains.idea.maven - Intelli ...

  3. #《Essential C++》读书笔记# 第一章 C++ 编程基础

    前言 Stanley B.Lippman 先生所著的<C++ Primer>是学习C++的一本非常优秀的教科书,但<C++ Primer>作为一本大部头书,显然不适合所有的初学 ...

  4. 抖音快手短视频去水印API,接口开发文档

    开发者官网:http://api.lingquan166.com/ 简介:根据抖音.微视.小红书.皮皮搞笑等APP中复制出来的链接,解析获取短视频的标题.封面.无水印短视频地址等信息. 接口地址: h ...

  5. 持续更新phpstorm h和pycharm 激活码

    1.hosts文件写入 0.0.0.0 account.jetbrains.com0.0.0.0 www.jetbrains.com 2.激活码: AHD9079DKZ-eyJsaWNlbnNlSWQ ...

  6. Spring AOP-基于@AspectJ风格

    关于Spring AOP,可以去看看官方文档: https://docs.spring.io/spring-framework/docs/current/spring-framework-refere ...

  7. Enable VT-x in your BIOS security settings, ensure that HAXM is installed properly. Try disabling 3rd party security software if the problem still occurs

    win7系统安装了了AndroidStudio3.5后用模拟器报错:Enable VT-x in your BIOS security settings, ensure that HAXM is in ...

  8. 给你的网站添加谷歌AMP、百度MIP、神马MIP链接自动提交功能

    我们在做网站的时候,经常会听到别人说SEO优化,网站优化等等.但是我们经常听的云里雾里的,但是经过我们运营一段时间之后,我们慢慢的就会熟悉了,知道什么是SEO.SEO中文译名为搜索引擎优化,既然是叫搜 ...

  9. 剑指offer-面试题16-数值的整数次方-数字

    /* 题目: 实现函数double Power(double base,int exponent), 求base的exponent次方. */ /* 思路: 本题需要考虑的情况较多: 1.0的负数次方 ...

  10. cf 989C

    构造一个网格图使得四种类型的联通分量分别有a,b,c,d 看图就知道应该如何去构造了 int gird[maxn][maxn]; int main(){ int a[4]; for(int i=0;i ...