摘要:
description [题面][1] 给定一棵$n$个节点的树,求出不同三元组$(x,y,z)$的个数, 其中$dist(x,y)=dist(y,z)=dist(x,z)$。 solution 考虑暴力。 设$f[i][j]$表示$i$的子树中深度为$j$的点数, $g[i][j]$表示$i$子树 阅读全文
摘要:
description [题面][1] 给定树,支持将树上与节点$x$距离不超过$d$的节点的点权均加上$w$,单点询问点权。 solution 动态点分治第四题。 同时第一次写线段树动态开点和标记永久化。。。 ~~然后发现其实还挺简单的~~ code cpp include include inc 阅读全文
摘要:
description [题面][1] solution 动态点分治第三题。 动态维护与某点距离$\le k$的所有点的点权和. 对于每一个节点开两棵线段树:一棵维护以距离为下标的点权和, 一棵维护对父亲的贡献。 没写过线段树动态开点... 于是就改成了树状数组... 弱 code cpp incl 阅读全文
摘要:
description [题面][1] solution 动态点分治第二题。 动态维护带权重心和动态查询$\sum_i dist(u,i)$。 查询开一堆数组在点分树上修改就行。 找带权重心的时候从根节点开始找 每次判断的时候点分树暴力往孩子跳求答案 需要注意的是: 在点分树上往重心所在的子树跳的时 阅读全文
摘要:
description [题面][1] solution 动态点分治第一题。 本来是想写 来着 动态维护最远点对 考虑每次暴力点分治的过程,相当于对于所有过重心的路径判一个最大值 于是我们在动态点分治的时候,对于每一个节点开一个堆,修改的时候往父亲维护即可 重写了至少3遍 果然我还是太弱了导致全方位 阅读全文
摘要:
description [题面][1] solution 点分治+最小割。 点分必选的重心,再在树上dfs判交,转化为最大权闭合子图。 可以做$k$棵树的情况。 code cpp include include include include include include include defi 阅读全文
摘要:
description [题面][1] solution 点分治枚举路径板板题。。 cpp void getroot(int u,int fa){ sz[u]=1;f[u]=0; for(RG int i=head[u];i;i=nxt[i]){ RG int v=to[i];if(v==fa||v 阅读全文
摘要:
description [题面][1] solution 这里的单点询问需要全部的修改才能统计出答案 需要用到线段树分治的另一个形式: 在树上$DFS$维护数据结构,进入叶子的时候求出询问答案,回溯的时候栈序撤销 数据结构选择的是并查集,维护连通性和到达代表元(根节点)的路径长度奇偶性,合并的时候判 阅读全文
摘要:
description [题面][1] solution 线段树分治+斜率优化简单题。 code cpp include include include include include include include include include include include include i 阅读全文
摘要:
description [题面][1] solution 线段树分治+斜率优化 毒瘤题 题目可以简化为: 你要维护一个包含元素$(x,c)$的集合 修改操作为从以前的一个版本更新,修改内容为添加或删除一个元素 查询操作给出$x_0$,查询某个版本中的$min\{(x x_0)^2+c\}$ 可以知道 阅读全文