CF916E Jamie and Tree】的更多相关文章

CF916E Jamie and Tree 题意翻译 有一棵n个节点的有根树,标号为1-n,你需要维护以下三种操作 1.给定一个点v,将整颗树的根变为v 2.给定两个点u, v,将lca(u, v)所在的子树都加上x 3.给定一个点v,你需要回答以v所在的子树的权值和 Translated by mangoyang 错误日志: 第一次 \(debug\) 是 \(jump\) 数组第二维开小了: 交了一次错了, 第二次没有特判修改/查询节点等于根的情况: 第三次 \(RE\) 又是数组开销了 .…
CF916E Jamie and Tree 题意翻译 有一棵\(n\)个节点的有根树,标号为\(1-n\),你需要维护一下三种操作 1.给定一个点\(v\),将整颗树的根变为\(v\) 2.给定两个点\(u, v\),将\(lca(u, v)\)所在的子树都加上\(x\) 3.给定一个点\(v\),你需要回答以\(v\)所在的子树的权值和 输入输出格式 输入格式: The first line of input contains two space-separated integers \(n\…
题面 解析 这题考试时刚了四个小时. 结果还是爆零了 主要就是因为\(lca\)找伪了. 我们先考虑没有操作1,那就是裸的线段树. 在换了根以后,主要就是\(lca\)不好找(分类讨论伪了). 我们将一开始以\(1\)为根的图作为原图. 仔细思考一下, 我们会发现只有当原图上的\(lca\)在\(1\)和当前的根的路径上时,\(lca\)才会发生变化. 考试时怎么没发现 而当\(lca\)变化后,我们画一下图, 就会发现, 现在的\(lca\)就是两个点与根的\(lca\)中深度较大的一个. (…
好吧这其实应该不是树剖... 因为只要求子树就够了,dfs就好了 大概就是记录一个全局根root 多画几幅图会发现修改时x,y以root为根时的lca为以1为根时的lca(x,y),lca(root,x),lca(root,y)中深度最大的一个 然后就可以做了 然后分类讨论当前更改操作节点x(更新即LCA(x,y),询问则就是x)和root的关系: (接下来有关操作都以1为根) 1.x=root: 即询问/修改整颗树的权值和 2.root不在x的子树内:这样的话这里x的子树是没有被影响到的,直接…
题目链接  Jamie and Tree 题意  给定一棵树,现在有下列操作: $1$.把当前的根换成$v$:$2$.找到最小的同时包含$u$和$v$的子树,然后把这棵子树里面的所有点的值加$x$: $3$.查询以$v$为根的子树的点权之和. 这道题其他都是常规操作,就是当前根结点为$cnt$的时候求$x$和$y$的$LCA$(操作$2$要用到) 我们假定解题的时候根一直不变(我一般都设$1$为根结点) 答案为$LCA(x,y)$ $xor$ $LCA(x, cnt)$ $xor$ $LCA(y…
E. Jamie and Tree time limit per test 2.5 seconds memory limit per test 256 megabytes input standard input output standard output To your surprise, Jamie is the final boss! Ehehehe. Jamie has given you a tree with n vertices, numbered from 1 to n. In…
To your surprise, Jamie is the final boss! Ehehehe. Jamie has given you a tree with n vertices, numbered from 1 to n. Initially, the root of the tree is the vertex with number 1. Also, each vertex has a value on it. Jamie also gives you three types o…
大意: n节点树, 每个点有权值, 三种操作: 1,换根. 2, lca(u,v)的子树权值全部增加x. 3, 查询子树权值和. 先不考虑换根, 考虑子树x加v的贡献 (1)对fa[x]到根的树链贡献为sz[x]*v; (2)对x子树内的点y贡献为sz[y]*v; 步骤(1)可以用单点更新子树求和实现, 步骤(2)可以子树更新单点求和实现 然后就是换根板子题了. 感觉蠢得不行的题啊, 还是打了好久, 怎么能这么菜啊 #include <iostream> #include <algori…
题面 题解 我们求它子树的权值和,一般用dfs序把树拍到线段树上做. 当它换根时,我们就直接把root赋值就行了,树的结构不去动它. 对于第二个操作,我们得到的链和根的相对位置有三种情况: 设两点为A.B,LCA 为 C,一个点x的dfs序为ld[x],从它的子树里出来时的dfs序为rd[x] 第一种情况,根是C的祖先,他的实际操作区间就是原本的子树区间[ld[C],rd[C]] 第二种情况,根在A.B路径上,那么它的实际LCA就应该是root,操作区间为[1,n] 第三种情况,根在C的子树上,…
Codeforces 916E 简要题解Description Description 有一棵n个点的树,每个节点上有一个权值wi,最开始根为1号点.现在有3种类型的操作: 1 root, 表示将根设为root. 2 u v x, 设u, v的最近公共祖先为p, 将p的子树中的所有点的权值加上x. 3 u, 查询u的子树中的所有点的权值和. 对于每个3操作,输出答案. n <= 500000 Solution ​ 考虑不能直接换根. 换了根就完了 ​ 那么我们考虑另一种办法,就是如何保持原来树的…