树剖
树剖
【模板】重链剖分/树链剖分
树状数组模板
struct bit {
int c1[N], c2[N], mod;
int lb(int x) {
return x & (-x);
}
void add(int l, int r, int v) {
int p = 1ll * (l - 1) * v % mod, q = 1ll * r * v % mod;
for (int i = l; i <= n; i += lb(i)) {
c1[i] = (c1[i] + v) % mod;
c2[i] = (c2[i] + p) % mod;
}
for (int i = r + 1; i <= n; i += lb(i)) {
c1[i] = ((c1[i] - v) % mod + mod) % mod;
c2[i] = ((c2[i] - q) % mod + mod) % mod;
}
}
int find(int x) {
int res = 0;
for (int i = x; i; i -= lb(i))
res = (res + 1ll * c1[i] * x % mod - c2[i] + mod) % mod;
return res;
}
int find(int l, int r, int res = 0) {
res = (find(r) - find(l - 1) % mod);
return (res + mod) % mod;
}
} T;
Grass Planting G
树上路径加单点查询,注意边点权转换
Max Flow P
区间加 最后查询一次最大值
求和
多次查询路径权值
Cow Land G
单点修改,多次查询路径权值异或和
树
单点打标记,多次询问某个结点最近的一个打了标记的祖先
线段树维护子树,向上跳的时候注意
月下“毛景树”
路径修改,路径加,路径最值
线段树维护即可
树的统计
同上!
魔法树
路径加,子树求和
Disruption P
对于每一个树边
考虑额外的边
维护路径即可
软件包管理器
黑白染色,多次给定
-
染黑
及其子树 -
染白
及其祖先
线段树维护即可
染色
路径染色,多次询问路径颜色段数量
线段树维护,额外记录区间左右两边颜色
树上操作
单点加,子树加,查询
线段树维护即可
部落冲突
查询两点连通性,动态删边恢复边
线段树维护即可
Qtree1
单点修改,路径最值
线段树维护即可
Qtree3
黑白染色,单点修改,查询
线段树上二分即可
洛谷树
单点修改,查询路径及其所有子路径权值异或和
值域很小,多开几颗线段树找规律即可!
旅游
单点修改,路径取反,查询路径和、路径最值
线段树维护即可
GSS7 - Can you answer these queries VII
路径修改,多次询问路径最大字段和
线段树维护即可
好玩,爱玩!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步