题意:多次询问,每次求点的标号在[l, r]之间的所有点到点z的lca的深度。

解:看到这题有没有想到某一道很熟悉的题?紫妹和幽香是17岁的少女,喜欢可爱的东西......

显然这就是开店的超级无敌弱化版......直接套用做法就行了。

记得对"爱你一生一世"取模。(滑稽)

 #include <cstdio>
#include <algorithm> typedef long long LL;
const int N = , M = ; struct Edge {
int nex, v;
}edge[N]; int tp; int e[N], top[N], num, fa[N], siz[N], son[N], d[N], n, pos[N];
LL sum[M];
int rt[N], tot, ls[M], rs[M], tag[M]; inline void adde(int x, int y) {
tp++;
edge[tp].v = y;
edge[tp].nex = e[x];
e[x] = tp;
return;
} void DFS1(int x) { // get siz fa son d
siz[x] = ;
d[x] = d[fa[x]] + ;
for(int i = e[x]; i; i = edge[i].nex) {
int y = edge[i].v;
fa[y] = x;
DFS1(y);
siz[x] += siz[y];
if(siz[y] > siz[son[x]]) {
son[x] = y;
}
}
return;
} void DFS2(int x, int f) { // get pos id top
top[x] = f;
pos[x] = ++num;
if(son[x]) {
DFS2(son[x], f);
}
for(int i = e[x]; i; i = edge[i].nex) {
int y = edge[i].v;
if(y == son[x]) {
continue;
}
DFS2(y, y);
}
return;
} void add(int x, int &y, int L, int R, int l, int r) {
if(!y || x == y) {
y = ++tot;
sum[y] = sum[x];
tag[y] = tag[x];
ls[y] = ls[x];
rs[y] = rs[x];
}
sum[y] += std::min(R, r) - std::max(L, l) + ;
if(L <= l && r <= R) {
tag[y]++;
return;
}
int mid = (l + r) >> ;
if(L <= mid) {
add(ls[x], ls[y], L, R, l, mid);
}
if(mid < R) {
add(rs[x], rs[y], L, R, mid + , r);
}
return;
} LL ask(int x, int y, int L, int R, int l, int r, int vx, int vy) {
if(L <= l && r <= R) {
return sum[y] - sum[x] + 1ll * (vy - vx) * (r - l + );
}
vx += tag[x];
vy += tag[y];
int mid = (l + r) >> ;
LL ans = ;
if(L <= mid) {
ans += ask(ls[x], ls[y], L, R, l, mid, vx, vy);
}
if(mid < R) {
ans += ask(rs[x], rs[y], L, R, mid + , r, vx, vy);
}
return ans;
} inline void add(int x, int time) {
while(x) {
add(rt[time - ], rt[time], pos[top[x]], pos[x], , n);
x = fa[top[x]];
}
return;
} inline LL ask(int x, int y, int z) {
LL ans = ;
while(z) {
ans += ask(rt[x - ], rt[y], pos[top[z]], pos[z], , n, , );
z = fa[top[z]];
}
return ans;
} int main() {
int q;
scanf("%d%d", &n, &q);
for(int i = , x; i <= n; i++) {
scanf("%d", &x);
adde(x + , i);
}
DFS1();
DFS2(, );
for(int i = ; i <= n; i++) {
add(i, i);
}
for(int i = , x, y, z; i <= q; i++) {
scanf("%d%d%d", &x, &y, &z);
LL t = ask(x + , y + , z + );
printf("%lld\n", t % );
}
return ;
}

AC代码

洛谷P4211 LCA的更多相关文章

  1. 洛谷 SP14932 LCA - Lowest Common Ancestor

    洛谷 SP14932 LCA - Lowest Common Ancestor 洛谷评测传送门 题目描述 A tree is an undirected graph in which any two ...

  2. 洛谷 P4211 [LNOI2014]LCA (树链剖分+离线)

    题目:https://www.luogu.org/problemnew/solution/P4211 相当难的一道题,其思想难以用言语表达透彻. 对于每个查询,区间[L,R]中的每个点与z的lca肯定 ...

  3. 洛谷 P4211 [LNOI2014]LCA 解题报告

    [LNOI2014]LCA 题意 给一个\(n(\le 50000)\)节点的有根树,询问\(l,r,z\),求\(\sum_{l\le i\le r}dep[lca(i,z)]\) 一直想启发式合并 ...

  4. 【洛谷 P4211】[LNOI2014]LCA(树链剖分,差分)

    题目链接 看到题目肯定首先想到要求LCA(其实是我菜),可乍一看,n与q的规模为5W, 求LCA的复杂度为\(O(logN)\),那么总时间复杂度为\(O(nq\ log\ n)\). 怎么搞呢? 会 ...

  5. 洛谷$P4211\ [LNOI2014]\ LCA$ 树链剖分+线段树

    正解:树剖+线段树 解题报告: 传送门$QwQ$ 看到$dep[lca]$啥的就想到之前托腮腮$CSP$模拟$D1T3$的那个套路,,, 然后试下这个想法,于是$dep[lca(x,y)]=\sum_ ...

  6. 洛谷P4180 [Beijing2010组队]次小生成树Tree(最小生成树,LCT,主席树,倍增LCA,倍增,树链剖分)

    洛谷题目传送门 %%%TPLY巨佬和ysner巨佬%%% 他们的题解 思路分析 具体思路都在各位巨佬的题解中.这题做法挺多的,我就不对每个都详细讲了,泛泛而谈吧. 大多数算法都要用kruskal把最小 ...

  7. 洛谷P2633 Count on a tree(主席树,倍增LCA)

    洛谷题目传送门 题目大意 就是给你一棵树,每个点都有点权,每次任意询问两点间路径上点权第k小的值(强制在线). 思路分析 第k小......又是主席树了.但这次变成树了,无法直接维护前缀和. 又是树上 ...

  8. 洛谷P3703 [SDOI2017]树点涂色(LCT,dfn序,线段树,倍增LCA)

    洛谷题目传送门 闲话 这是所有LCT题目中的一个异类. 之所以认为是LCT题目,是因为本题思路的瓶颈就在于如何去维护同颜色的点的集合. 只不过做着做着,感觉后来的思路(dfn序,线段树,LCA)似乎要 ...

  9. 洛谷P4180 [BJWC2010]次小生成树(最小生成树,LCT,主席树,倍增LCA,倍增,树链剖分)

    洛谷题目传送门 %%%TPLY巨佬和ysner巨佬%%% 他们的题解 思路分析 具体思路都在各位巨佬的题解中.这题做法挺多的,我就不对每个都详细讲了,泛泛而谈吧. 大多数算法都要用kruskal把最小 ...

随机推荐

  1. 20155217《网络对抗》Exp07 网络欺诈防范

    20155217<网络对抗>Exp07 网络欺诈防范 实践内容 简单应用SET工具建立冒名网站 ettercap DNS spoof 结合应用两种技术,用DNS spoof引导特定访问到冒 ...

  2. 2017-2018-2 20155224『网络对抗技术』Exp5:MSF基础应用

    基础问题回答 用自己的话解释什么是exploit,payload,encode? exploit就相当于是载具,将真正要负责攻击的代码传送到靶机中,我觉得老师上课举的火箭和卫星的例子非常形象,火箭只是 ...

  3. 【SP1811】LCS - Longest Common Substring

    [SP1811]LCS - Longest Common Substring 题面 洛谷 题解 建好后缀自动机后从初始状态沿着现在的边匹配, 如果失配则跳它的后缀链接,因为你跳后缀链接到达的\(End ...

  4. 【第九课】MriaDB密码重置和慢查询日志

    目录 1.如何进行修改MariaDB的密码 2.Mariadb的慢查询日志 1.如何进行修改MariaDB的密码 记得root密码的修改方式: [root@localhost ~]# mysqladm ...

  5. 最简单的iOS网络请求

    做iOS开发,说到网络请求,大家可能都不约而同的提到AFN,可以说大家的网络请求都是用AFN封装而成,AFN的强大易用的确很好. 但是版本升级就会出现一些问题,所以就自己基于iOS原生封装了一个网络请 ...

  6. UI Recorder 安装教程(二)

    前言: UI Recorder支持无线native app(Android, iOS)录制, 基于macaca实现:https://macacajs.com/ 本次教程只针对无线native app( ...

  7. ace how to guide

    Configuring the editor there are several ways to pass configuration to Ace 有几种方法可以将配置传递给ace // pass ...

  8. 5分钟让你明白HTTP协议

    一.HTTP简介 1.http协议介绍 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标 ...

  9. 【SE】Week1 : 个人博客作业

    快速看完整部教材,列出你不懂的 5 - 10 个问题,发布在你的个人博客上. 1)针对书中提到的NABCD模型中的N,如何发掘市场不明确的潜在用户需求? 2)PM是否负责团队职责的分配以及工程模块的设 ...

  10. 【Alpha】第一次Scrum Meeting

    本次会议内容概括如下: 总结了一周以来大家任务的完成情况,对消耗时间进行统计,并评估了各自对团队的贡献(影响)程度 整理并融合所有人的工作的结果生成了相应的总结性文档 进一步明确了团队中各个成员的定位 ...