树链剖分
magic_sheep
这个作者很懒,什么都没留下…
展开
-
BZOJ 4515 [Sdoi2016]游戏
题目描述: 每次询问树上的一段路径,求出路径上点权最小值。修改操作,选择一段路径使路径上的每个点又新加入一个数字为 a×dis+b。每个点的初始数字为123456789123456789。可以树链剖分,对于a*dis+b的式子,可以转化成一条线段,于是问题转化成动态维护区间内线段的最低点。可以用标记不下放线段树来维护。#include<cstdio> #include<iostream> #incl原创 2017-02-28 21:22:28 · 320 阅读 · 0 评论 -
BZOJ 4551 [Tjoi2016&Heoi2016]树
本次省选最水的题,暴力可过。 正解可以用树链剖分,或者直接并查集找爸爸就行了。 bzoj 上只能用树链剖分。#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #define F(i,j,n) for(int原创 2017-02-25 21:32:20 · 266 阅读 · 0 评论 -
BZOJ 1036 [ZJOI2008]树的统计Count
树链剖分挺好的练手题,直接放代码吧。/************************************************************** Problem: 1036 User: vermouth Language: C++ Result: Accepted Time:2756 ms Memory:152744 kb *****原创 2017-03-10 21:45:27 · 279 阅读 · 0 评论 -
树链剖分讲解与应用 && BZOJ 1036 [ZJOI2008]树的统计Count
树链剖分算是一个应用比较广泛而且比较好实现的一种方法,其大体思想主要是把树链分成轻链和重链,这样既可以套用数据结构也可以求LCA。 首先定义 重儿子和轻儿子,对于一个非叶子节点,它的所有儿子中子树大小最大的即为重儿子,其余的为轻儿子。 我们可以用一次dfs来求出所有的重儿子,重儿子连成的树链即为重链,其余的为轻链,可以证明所有的重链不超过logn条。 对于每个节点还要维护其深度大小…..之后原创 2018-12-16 12:42:01 · 283 阅读 · 0 评论