
树链剖分
Ripped
我那么浮躁却想要读懂你的生活
展开
-
【BZOJ 4326】【NOIP 2015 d2t3】运输计划
题意给你一棵树和边权,有若干条航线,从树上的一个点到另一个点。令运输时间为所有航线所需要的时间中的最长时间。你可以将某一条边的权值变为0,求这个最长时间的最小值。样例输入6 3 1 2 3 1 6 4 3 1 7 4 3 6 3 5 5 3 6 2 5 4 5样例输出11SOL先讲一下部分分毕竟这是一道联赛题。 1、首先想到就是预处理lca,然后枚举变为0的边计算每条航线的权值,时原创 2017-02-20 18:34:43 · 460 阅读 · 0 评论 -
【BZOJ 4034】【HAOI 2015】树上操作
BZOJ 4034题意给你一棵树和边权,然后有若干个操作,操作分为三种: 操作 1:把某个节点x的点权增加a; 操作 2:把某个节点x为根的子树中所有点的点权都增加a; 操作 3:询问某个节点x到根的路径中所有点的点权和。样例输入5 5 1 2 3 4 5 1 2 1 4 2 3 2 5 3 3 1 2 1 3 5 2 1 2 3 3样例输出6 9 13SOL其实这题的原创 2017-02-20 18:43:37 · 330 阅读 · 0 评论 -
【BZOJ 3626】【LNOI 2014】LCA
BZOJ 3626题意给你一棵树,定义根节点的深度为1。 有若干询问,每次询问l r z,求出[l,r]所有节点和z节点的公共祖先深度之和。(模201314)样例输入5 2 0 0 1 1 1 4 3 1 4 2样例输出8 5SOL我真的很想吐槽这道题作为一道省选题没有部分分! 所以这道题目是不是只有0分和100分QAQ 首先考虑一下一组操作怎么做。首先你要想到差分,也就是说[l原创 2017-02-20 18:52:52 · 290 阅读 · 0 评论 -
【SPOJ 375】Query on a tree&树链剖分详解
SPOJ 375题意给你一棵树每条边的权值,有两种操作:修改某一条边的权值;询问两点之间的路径和。(多组数据)样例输入13 1 2 1 2 3 2 QUERY 1 2 CHANGE 1 3 QUERY 1 2 DONE样例输出1 3树链剖分详解树链剖分是一种把树上询问转换为链状询问的方法,也就是说只要是单链能做树上也能做,并且只会加一个很小的常数。所以一般如果部分分是单链的话,后面的点原创 2017-02-19 16:52:24 · 808 阅读 · 0 评论 -
【BZOJ 4034】【HAOI 2015】树上操作
考虑到在dfs序中,以某个节点为根的子树的编号一定是连续的,所以可以用树剖来做。单点修改和查询都是裸的树剖操作,而区间修改只要找到区间大小就行了,dfs的时候记录一下子树大小即可。 貌似吉老司机给出了树状数组的做法,但我不知道怎么查询QAQ#include<cmath>#include<cstdio>#include<vector>#include<cstring>#include<iom原创 2017-03-06 15:26:47 · 333 阅读 · 0 评论 -
【BZOJ 4538】【HNOI 2016】网络
又是一道树剖题。。。 对每个点建一个优先队列。 对1号操作取反,比如a到b之间加入重要度为v的话,就往不是a到b路径的节点加入v;2号操作是1号操作的逆运算,对某个时间打上标记即可;对于3号操作询问,只要找一下当前节点对应的优先队列中权值最大且对应的时间没有被打上标记的就是答案。#include<cmath>#include<cstdio>#include<vector>#include原创 2017-03-06 18:24:46 · 318 阅读 · 0 评论