[spojQTREE7]Query on a tree VII】的更多相关文章

即QTREE5和QTREE6组合,即将原本维护子树范围内点数改为维护子树范围内最小值即可,由于最小值没有可减性,因此需要使用set (虽然形式上与QTREE5类似,但QTREE5维护的信息更巧妙一些,而这题比较直接) 另外关于make_root中没有rev的修改,实际上也不需要改变 时间复杂度为$o(n\log^{2}n)$,可以通过 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 100005 4 vector<…
Description You are given a tree (an acyclic undirected connected graph) with n nodes. The tree nodes are numbered from 1 to n. Each node has a color, white or black, and a weight. We will ask you to perfrom some instructions of the following form: 0…
Description 一棵树,支持三种操作,修改点权,修改颜色,问所有与他路径上颜色相同的点的最大权,包含这两个点. Sol LCT. 用LCT来维护重边,对于每个节点在建一个set用来维护轻边,这样Link和Cut是时候就非常好操作了,直接Access一下,Splay一下,直接删掉就可以了. 因为set是不统计重边的,然后对于每个节点的信息由他的父亲来保存,因为一个节点可能有很多儿子但一定只有一个父亲. 还有一个问题就是每个点的权值不能建全局的,因为维护的两颗LCT不能够同时删除,所以每个L…
传送门 跟QTREE6QTREE6QTREE6神似,改成了求连通块里的最大值. 于是我们对每条链开一个heapheapheap维护一下即可. MDMDMD终于1A1A1A链分治了. 代码: #include<bits/stdc++.h> #define ri register int #define fi first #define se second using namespace std; inline int read(){ int ans=0; bool w=1; char ch=ge…
Description 一棵树,每个点初始有个点权和颜色(0/1) 0 u :询问所有u,v 路径上的最大点权,要满足u,v 路径上所有点的颜色都相同 1 u :反转u 的颜色 2 u w :把u 的点权改成w Solution 对于每一种颜色,我们开一个 \(LCT\) 来维护 首先为了使得 \(LCT\) 维护的黑树连通,难免会有白点,但是最多只会有一个,因为一旦不连通了就没有必要维护了,对于白树也是同理 对于每一个 \(LCT\) 的节点,只需要维护一个 \(splay\) 中的子树 \(…
用 set 维护子树信息,细节较多. Code: #include <cstring> #include <cstdio> #include <algorithm> #include <set> #include <string> #define setIO(s) freopen(s".in","r",stdin), freopen(s".out","w",stdou…
洛谷题目传送门 思路分析 维护子树最值还是第一次写QwQ 因为子树的最值会变化,所以不能简单地把最值记下来,还要维护一个平衡树,把每个子树的最大值扔进去,来资磁插入.删除和查询最值. 然后我就懒得手写了,毕竟Splay作为平衡树时与LCT中的Splay写法不一样,不能混用. 于是要去学习STL啦 非常感谢Kelin巨佬的代码,我终于初步掌握了一下set的用法 (比如说知道了multiset的erase某值是把所有等于该值的节点删除......) (还比如说知道了rbegin和end的区别....…
题意翻译 一棵树,每个点初始有个点权和颜色(输入会给你) 0 u:询问所有u,v路径上的最大点权,要满足u,v路径上所有点颜色相同 1 u:反转u的颜色 2 u w:把u的点权改成w 题解 Qtree6的升级版,建议先做完再来做这题(毕竟那个代码改一改就能做这个了两倍经验岂不美哉)(Qtree6我的题解->这里) 我就当你们已经都会Qtree6了(小声) 就是把Qtree6中维护连通块中点的个数,变成维护子树中的最大值就行了 实子树的max直接用,虚子树的max可以直接丢进一个set里 然后就是…
Query on A Tree Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others)Total Submission(s): 1238    Accepted Submission(s): 444 Problem Description Monkey A lives on a tree, he always plays on this tree.One day, monkey…
树链剖分整理 树链剖分就是把树拆成一系列链,然后用数据结构对链进行维护. 通常的剖分方法是轻重链剖分,所谓轻重链就是对于节点u的所有子结点v,size[v]最大的v与u的边是重边,其它边是轻边,其中size[v]是以v为根的子树的节点个数,全部由重边组成的路径是重路径,根据论文上的证明,任意一点到根的路径上存在不超过logn条轻边和logn条重路径. 这样我们考虑用数据结构来维护重路径上的查询,轻边直接查询. 通常用来维护的数据结构是线段树,splay较少见. 具体步骤 预处理 第一遍dfs 求…