随笔分类 - 树上问题:树链剖分
摘要:传送门: 解题思路: 算是补坑了,这题除了Invert以外就可以树剖线段树解决了。 考虑Invert操作,延续先前树链剖分的做法,考虑先前算法的瓶颈。 最暴力的方法是暴力交换权值,然而这种方法忽略了当前树链剖分序的一个性质,那就是很多部分的树链是连续的,而且仅有$O(\lg n)$个区间。 考虑只有
阅读全文
摘要:Description 小A走到一个山脚下,准备给自己造一个小屋。这时候,小A的朋友(op,又叫管理员)打开了创造模式,然后飞到 山顶放了格水。于是小A面前出现了一个瀑布。作为平民的小A只好老实巴交地爬山堵水。那么问题来了:我们把这 个瀑布看成是一个n个节点的树,每个节点有权值(爬上去的代价)。小A
阅读全文
摘要:Description Input 第一行包含一个正整数N,表示树中结点的个数。第二行包含N个正实数,第i个数表示xi (1<=xi<=10^5)。第三行包含N个正实数,第i个数表示yi (1<=yi<=10^5)。第四行包含N个正实数,第i个数表示pi (1<=pi<=10^5)。第五行包含N个正
阅读全文
摘要:Description Input * 第一行: 两个空格分开的数, N和M * 第2..M+1行: 三个空格分开的数a_i, b_i,和t_i * 第一行: 两个空格分开的数, N和M * 第2..M+1行: 三个空格分开的数a_i, b_i,和t_i Output * 第1..N-1行: 第i行
阅读全文
摘要:解题思路: 树链剖分裸题,线段树维护区间和和最大值。 代码:
阅读全文
摘要:Description Linux用户和OSX用户一定对软件包管理器不会陌生。通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个软件包的安装所依赖的其它软件包),完成所有的配置。Debian/Ubuntu使用的ap
阅读全文
摘要:Description 给出一个n个节点的有根树(编号为0到n-1,根节点为0)。一个点的深度定义为这个节点到根的距离+1。设dep[i]表示点i的深度,LCA(i,j)表示i与j的最近公共祖先。有q次询问,每次询问给出l r z,求sigma_{l<=i<=r}dep[LCA(i,z)]。(即,求
阅读全文
摘要:Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段), 如“112221”由3段组成:“11”、“222”和“1”。 请你写一个程序依次完成这m个操作。 给定
阅读全文
摘要:题目大意: 就是给你一棵以1为根的树,询问每一个节点的子树内节点数最多的深度(相对于这个子树根而言)若有多解,输出最小的。 解题思路: 这道题用树链剖分,两种思路: 1.树上DSU 首先想一下最暴力的算法:统计子树每个深度节点的个数(桶)相当于以每个节点为根遍历子树搜索一遍答案,这样做时间复杂度是O
阅读全文