[ZJOI2007]捉迷藏 (点分树+堆*3)】的更多相关文章

点分树一点都不会啊(还是太菜了) 点分树就是我们点分治构成的新树.满足深度很小. 然后我们就可以在上面瞎维护东西了. 三个大根堆: \(C[u]\)里装的是点分树中u的子树所有点到点分树中u的父亲的距离. \(B[u]\)里装的是点分树中u的所有儿子的C的最大值. \(A\)里装的是所有\(B\)的最大值与次大值之和. \(A\)的堆顶就是答案. (我一开始一直以为两个堆就行,对第三个对表示疑惑,又懒得深入想,一直翻题解.千万不能犯懒不想啊) 我们找答案可以快速找到.问题是怎么维护? 因为我们是…
[bzoj1095][ZJOI2007]Hide 捉迷藏 2015年4月20日7,8876 Description 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条双向走廊组成,这N-1条走廊的分布使得任意两个屋子都互相可达.游戏是这样进行的,孩子们负责躲藏,Jiajia负责找,而Wind负责操纵这N个屋子的灯.在起初的时候,所有的灯都没有被打开.每一次,孩子们只会躲藏在…
动态点分治入 门 题? 题目描述 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由 \(N\) 个屋子和 \(N-1\) 条双向走廊组成,这 \(N-1\) 条走廊的分布使得任意两个屋子都互相可达. 游戏是这样进行的,孩子们负责躲藏,Jiajia负责找,而Wind负责操纵这 \(N\) 个屋子的灯.在起初的时候,所有的灯都没有被打开.每一次,孩子们只会躲藏在没有开灯的房间中,但是为了增加刺激性,孩…
题目描述 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条双向走廊组成,这N-1条走廊的分布使得任意两个屋子都互相可达.游戏是这样进行的,孩子们负责躲藏,Jiajia负责找,而Wind负责操纵这N个屋子的灯.在起初的时候,所有的灯都没有被打开.每一次,孩子们只会躲藏在没有开灯的房间中,但是为了增加刺激性,孩子们会要求打开某个房间的电灯或者关闭某个房间的电灯.为了评估某一次…
淀粉质点分治可真是个好东西 Part A.点分治 众所周知,树上分治算法有$3$种:点分治.边分治.链分治(最后一个似乎就是树链剖分),它们名字的不同是由于分治方式的不同的.点分治,顾名思义,每一次选择一个点进行分治,对于树上路径统计类型的问题有奇效,思路很好理解,只是码量有些烦人 先来看一道模板题:CF161D 至于为什么我没有放Luogu模板题是因为那道题只会写$O(n^2logn)$的算法(然而跑得过是因为跑不满) 这道题要求在$N$个点的树上找距离为$K$的点对的数量. 因为我们是来学点…
P2056 [ZJOI2007]捉迷藏 题目描述 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由\(N\)个屋子和\(N-1\)条双向走廊组成,这\(N-1\)条走廊的分布使得任意两个屋子都互相可达. 游戏是这样进行的,孩子们负责躲藏,Jiajia负责找,而Wind负责操纵这\(N\)个屋子的灯.在起初的时候,所有的灯都没有被打开.每一次,孩子们只会躲藏在没有开灯的房间中,但是为了增加刺激性,孩…
树上最远点对(树的直径) 做法1:树形dp 最长路一定是经过树上的某一个节点的. 因此: an1[i],an2[i]分别表示一个点向下的最长链和次长链,次长链不存在就设为0:这两者很容易求 an3[i]表示i为根的子树中的答案:an3[u]=max(max{an3[v]}(v是u的子节点),an1[u]+an2[u]) #include<cstdio> #include<cstring> #include<queue> #include<algorithm>…
树 什么是树? 大概像下面这样: 树的概念 树的每个点被称为节点: 连接的两个点,一个为父节点,一个为子节点,例如上图中,\(1\)是\(4\)的父节点,\(4\)是\(1\)的子节点: 没有父节点的节点称为根节点,注意:每一个非根节点的节点有且只有一个父节点: 没有子节点的节点称为叶子节点,如上图中,\(6,10,5,9,7,8\)是叶子节点: 一棵树必然由\(n\)个节点,\(n-1\)条边组成: 除了根节点外,每个子节点可以分为多个不相交的子树: 同"辈分"的节点在树的同一层里,…
入坑动态点分治的题目,感觉还不错被卡常后重构代码 首先静态点分治相信大家肯定都会,就是不断找重心然后暴力计算每棵子树内的贡献. 这题如果只有单次询问,我们很容易想到对于每个分治中心的所以儿子的子树中找两条最长链拼起来. 或者是直接以这个点为端点的一条链的最大值. 如果就这么做复杂度将达到\(O(qn\log n)\),完全无法接受. 我们还是考虑利用一下这个思想,点分治的优化时间的主要方式就是它这棵递归树高度均衡,可以直接在上面完成暴力操作. 注意到这道题没有动态加边,所以其实树的形态是不会变化…
传送门 如果没有修改显然就直接点分治 有修改那就动态点分治 动态点分治就是在点分树上维护一些东西,查询时也在点分树上查 因为点分树深度是$log$的所以可以保证时间复杂度 此题我们需要在点分树上维护 $c$ 和 $f$ $f[x]$ 维护节点 $x$ 的子树中传给它父亲 $Fa$ 的所有路径长度 $c[x]$ 维护节点 $x$ 的每一个儿子 $v$ 的 $f[v]$ 的最大值 那么询问的答案就是 max(每个节点的 $c[x]$ 的最大值与次大值之和) 那么对于维护每一个 $c[x]$ ,我们枚…