树链剖分
青烟绕指柔!
我不怕千万人阻挡,只怕自己投降。
展开
-
圣剑护符
题目链接:圣剑护符能不能异或出相同的数,其实就是看每个数字加入线性基的时候,如果加入不进去,那么肯定能被异或出来。因为线性基最多31个,所以暴力加入判断即可。然后区间异或用树剖+线段树维护即可。AC代码:#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=1e5+10;int n,q,a[N],pos[N],bl[N],dep[N],f[N],sz[N],son[N],cn原创 2021-06-30 23:52:36 · 184 阅读 · 0 评论 -
Codeforces - Masha and Cactus
题目链接:Codeforces - Masha and Cactus考虑dp[x] 为x的子树中的最大值。考虑枚举LCA转移,我们可以发现转移是一条链,然后树剖维护链上子节点的和进行优化即可。考虑转移一条链的时候,我们需要加上这条链上相邻的节点的dp[v],我们可以对每个点维护一个子节点的sum - 当前节点的dp[x] 然后链上求和就是相邻节点的dp之和。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<原创 2020-09-08 23:57:39 · 733 阅读 · 0 评论 -
Disruption P
题目链接:Disruption P可以发现,如果某条边可以弥补当前边的缺失,那么这条边在树上的路径一定会经过这条边。所以我们对每条树上路径取min即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=5e4+10,inf=0x3f3f3f3f;int n,m原创 2020-07-15 14:25:18 · 210 阅读 · 0 评论 -
This Problem Is Too Simple!
题目链接:This Problem Is Too Simple!因为每次只查询一种颜色,所以我们可以直接对每一种颜色开一颗线段树。如果是多种颜色就需要树套树了。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=1e5+10,M=N*80;int n,q,val原创 2020-07-11 09:24:40 · 311 阅读 · 0 评论 -
礼物
题目链接:礼物考虑如果是一个序列,我们显然可以ST表,或者线段树维护区间合并。现在变成了树,我们直接用树剖化成链即可。不过要注意很多细节,因为我们是 x->y ,即 x-> lca ->y ,最后要考虑x和y的深度关系,需要继承x->y的答案还是y->x的答案,每次ask的时候,都是从上到小。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>原创 2020-05-20 11:37:52 · 320 阅读 · 0 评论 -
Innovations
题目链接:Innovations显然每条边可以计算贡献。每次修改的时候,可以利用势能线段树暴力修改。每次修改的时候维护一个答案即可。这个是在树上,先HLD做一下即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long long...原创 2020-04-27 11:55:34 · 398 阅读 · 0 评论 -
有趣的游戏
题目链接:有趣的游戏感觉比较裸的题了。首先树剖之后,线段树维护区间严格次大值。对于全局次大值,我们可以用multiset先删除找到的值,然后再找次大值,注意是严格次大值,所以lower_bound即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#de...原创 2020-04-21 15:03:01 · 147 阅读 · 0 评论 -
寻找
题目链接:寻找其实答案只有两种情况。设a,b的 LCA 为 lc 。那么点c有两种情况。如果点c不在lc的子树中,那么答案必然是lc。如果点c在lc的子树中答案就有可能是lca(c,a)或者lca(c,b)。具体证明可以从点c相对于这个路径的位置来证明。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#includ...原创 2020-04-15 12:26:46 · 170 阅读 · 0 评论 -
[SDOI2015]寻宝游戏
题目链接:[SDOI2015]寻宝游戏从任意一个关键点出去,然后走回来路径长度都是一样的。因为是一个回路。答案其实跟dfs序有关。我们对关键点按照dfs序排序之后可以发现:就是两两之间的距离之和+首尾距离。然后我们就可以用set维护集合的dfs序点,然后树剖求距离即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")...原创 2020-04-13 11:22:55 · 184 阅读 · 0 评论 -
51NOD - 1830路径交
题目链接:51NOD - 1830路径交因为每次是区间询问,所以我们可以类似ST表预处理,或者线段树区间合并去处理。每次维护节点就是代表所有路径的交集。现在问题就是两个路径的交怎么求:两条路径两两端点求LCA,我们可以得到4个LCA。令s0,s1为深度最大的两个点。若s0!=s1,路径交为s0,s1若s0=s1,如果dep[s0]<dep[lca(a,b)] and dep[...原创 2020-04-09 13:53:35 · 204 阅读 · 0 评论 -
51NOD - 1462树据结构
题目链接:51NOD - 1462树据结构因为有两个数据,线段树不好下放lazy标记。所以我们直接转化为矩阵乘法即可。每次乘不同的矩阵,具体是什么矩阵,自己推一推即可。然后再树剖一下。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int l...原创 2020-04-01 16:28:17 · 188 阅读 · 0 评论 -
MMSet2
题目链接:MMSet2到集合当中最短的距离,一定是集合中最长两点之间的中点。所以我们现在就是要找到集合中最长的距离。类似于树的直径,我们可以发现,最长的距离一定与最大深度的点有关。所以找到最大的点,然后暴力求距离即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>...原创 2020-03-28 20:25:08 · 259 阅读 · 0 评论 -
Codeforces - Tree Queries
题目链接:Codeforces - Tree Queries显然,我们找一条路径关键是什么:最深的节点,我们必然会走到这个节点,然后看其他点到这条链的距离小于等于1即可。(水题解)AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int lon...原创 2020-03-27 09:46:48 · 278 阅读 · 0 评论 -
Codeforces - Misha, Grisha and Underground
题目链接:Codeforces - Misha, Grisha and Underground我们可以枚举终点,问题就转变为a->c和b->c的交点个数。我们分别考虑b是c到a的子树中,或者不是,然后可以发现公式:(dis(a,c)+dis(b,c)-dis(a,b))/2+1;AC代码:#pragma GCC optimize("-Ofast","-funroll-all...原创 2020-03-04 14:02:46 · 203 阅读 · 0 评论 -
XOR TREE
题目链接:XOR TREE推每个点的贡献即可。然后可以发现一些规律。之后树剖维护奇偶点的异或值即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int N...原创 2020-02-29 00:05:30 · 716 阅读 · 0 评论 -
2019 ICPC Asia Shanghai - A Simple Problem On A Tree
题目链接:2019 ICPC Asia Shanghai - A Simple Problem On A Tree一道码农题。可能出题人想锻炼我们的代码能力。QAQ就是线段树维护三次方,然后转到树上,就用树剖维护即可。特别要注意几个lazy的转换。优先级也要注意。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#inc...原创 2020-02-18 18:01:05 · 326 阅读 · 0 评论 -
道路相遇 - 广义圆方树
题目链接:道路相遇 - 圆方树看图我们可以发现,必经点的个数就是任意两点之间的圆点数。圆点数 = 边数 / 2 + 1所以我们先建立圆方树,然后树剖求任意两点之间的距离即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long...原创 2020-02-16 20:48:54 · 215 阅读 · 0 评论 -
P4949 最短距离
题目描述给出一个 n 个点 n 条边的无向连通图。你需要支持两种操作:修改 第 x 条边的长度为 y ;查询 点 x 到点 y 的最短距离。共有 m 次操作。输入格式输入共 n+m+1 行:第 11 行,包含两个正整数 n,m,表示点数即边数,操作次数。第 22 行到第 n+1 行,每行包含三个正整数 x,y,z,表示 x 与 y 间有一条长度为 z 的边。第 n+2 到 n+...原创 2020-01-31 10:04:37 · 275 阅读 · 0 评论 -
[Vani有约会]雨天的尾巴
题目背景深绘里一直很讨厌雨天。灼热的天气穿透了前半个夏天,后来一场大雨和随之而来的洪水,浇灭了一切。虽然深绘里家乡的小村落对洪水有着顽固的抵抗力,但也倒了几座老房子,几棵老树被连根拔起,以及田地里的粮食被弄得一片狼藉。无奈的深绘里和村民们只好等待救济粮来维生。不过救济粮的发放方式很特别。题目描述首先村落里的一共有n座房屋,并形成一个树状结构。然后救济粮分m次发放,每次选择两个房屋(x...原创 2019-11-26 10:53:40 · 267 阅读 · 0 评论 -
[HEOI2016/TJOI2016]树
题目描述在 2016 年,佳媛姐姐刚刚学习了树,非常开心。现在他想解决这样一个问题:给定一颗有根树,根为 11 ,有以下两种操作:标记操作:对某个结点打上标记。(在最开始,只有结点 11 有标记,其他结点均无标记,而且对于某个结点,可以打多次标记。)询问操作:询问某个结点最近的一个打了标记的祖先。(这个结点本身也算自己的祖先)你能帮帮她吗?输入格式第一行两个正整数 NN 和 QQ 分别...原创 2019-11-21 17:50:35 · 226 阅读 · 0 评论 -
月下“毛景树”
题目描述毛毛虫经过及时的变形,最终逃过的一劫,离开了菜妈的菜园。 毛毛虫经过千山万水,历尽千辛万苦,最后来到了小小的绍兴一中的校园里。爬啊爬爬啊爬毛毛虫爬到了一颗小小的“毛景树”下面,发现树上长着他最爱吃的毛毛果 “毛景树”上有N个节点和N-1条树枝,但节点上是没有毛毛果的,毛毛果都是长在树枝上的。但是这棵“毛景树”有着神奇的魔力,他能改变树枝上毛毛果的个数:Change k w:将第k条树...原创 2019-10-09 12:47:10 · 191 阅读 · 0 评论 -
货车运输 - Kruskal重构树
题目描述AA国有nn座城市,编号从 11到nn,城市之间有 mm 条双向道路。每一条道路对车辆都有重量限制,简称限重。现在有 qq 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。输入格式第一行有两个用一个空格隔开的整数n,mn,m,表示 AA 国有nn 座城市和 mm 条道路。接下来 mm行每行33个整数 x, y, zx,y,z,每两个整数之间用一个...原创 2019-10-08 20:45:02 · 275 阅读 · 0 评论 -
[HAOI2015]树上操作
题目描述有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a 。操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。操作 3 :询问某个节点 x 到根的路径中所有点的点权和。输入格式第一行包含两个整数 N, M 。表示点数和操作数。接下来一行 N 个整数,表示树中节点的初始权值。接下来 N-1 ...原创 2019-09-01 22:34:00 · 190 阅读 · 0 评论 -
[国家集训队]旅游
题目描述Ray 乐忠于旅游,这次他来到了T 城。T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接。为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间有且只有一条路径。换句话说, T 城中只有N − 1 座桥。Ray 发现,有些桥上可以看到美丽的景色,让人心情愉悦,但有些桥狭窄泥泞,令人烦躁。于是,他给每座桥定义一个愉悦度w,也就是说,Ray 经过这座桥会增加...原创 2019-09-01 00:17:27 · 235 阅读 · 0 评论 -
[ZJOI2008]树的统计Count - 树链剖分
1036: [ZJOI2008]树的统计CountTime Limit: 10 Sec Memory Limit: 162 MBSubmit: 25368 Solved: 10236[Submit][Status][Discuss]Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I. CHAN...原创 2019-08-30 11:10:05 · 222 阅读 · 0 评论