看到换根果断lct啊,然而其实我板子还没有打熟,还不会维护子树信息,于是就挂掉了…… 然而正解并不是lct。 其实好像很久很久以前将lca的时候好像讲到过一道换根的题,当时没有听懂。 直接说正解吧: 把dfs序搞出来用线段树维护。 用一个变量记录当前根节点,操作一直接改就行了。 然后是操作三: 分情 ...
分类:
其他好文 时间:
2019-09-27 15:18:58
阅读次数:
65
这题解法很多,简单说几个: 1. 线段树合并,时间复杂度是 $O(nlog^2n)$ 的. 2. 暴力跳 $fail,$ 时间复杂度 $O(n\sqrt n),$ 比较暴力. 3. 建立后缀树后在 $dfs$ 序上数点,时间复杂度为 $O(nlogn),$ 十分优秀. Code: ...
分类:
编程语言 时间:
2019-09-24 12:21:37
阅读次数:
96
题意 给定一颗点带权无根树,请你选定一个根并对这棵树进行深度优先遍历,得到一个点的经过顺序(即$dfs$序):$v_1,v_2...v_n$,记点$u$的点权为$A_u$ 请最小化下面式子的值 $$ \sum_{i=1}^n i\times A_{v_i} $$ 解法 大佬们都说这题是煞笔题。。我还 ...
分类:
其他好文 时间:
2019-09-22 23:33:49
阅读次数:
93
题意 给出一个有根树,给出m个操作,操作1表示使得这一棵树的某一个节点的所有子树染上某一种颜色,操作2表示查询这个节点及其子树的颜色数量。 思路 对于一颗有根树来说,我们依靠dfs序就可以变换成为一个有序的序列,所以根据dfs序可以建立线段树。 对于线段树的操作,更新的话,区间更新,推lazy标记, ...
分类:
其他好文 时间:
2019-09-22 12:34:59
阅读次数:
64
"题目" 我们开一棵线段树记录某个深度中最大的$dis$。 同时利用dfs序来让每条长链开一个线段树并且保证不重复。 遍历到某个点时,先处理重儿子,然后把自己加入线段树,计算一端为自己另一端在重儿子子树中的答案。 然后处理每个轻儿子,暴力计算一端在该轻儿子所在子树中,另一端在该点已遍历过的子树中的答 ...
分类:
其他好文 时间:
2019-09-21 10:55:50
阅读次数:
79
题意:给定一棵树 每个结点有一个颜色 然后又m个询问 询问:x d 问x的子树内不超过dep[x]+d 深度的子树结点一共有多少个颜色? 1、可以先将问题简化为问整个子树内有多少个不同的颜色 暴力解法树套树 但是可以用一个技巧来快速维护: 一个颜色一个颜色地处理 把所有相同颜色的点按照dfs序排序, ...
分类:
其他好文 时间:
2019-09-20 21:14:06
阅读次数:
51
0x21 树与图的遍历 树与图的深度优先遍历 深度优先遍历,就是在每个点$x$上面的的多条分支时,任意选择一条边走下去,执行递归,直到回溯到点x后再走其他的边 树的DFS序 一般来说,我们在对树的进行深度优先时,对于每个节点,在刚进入递归时和回溯前各记录一次该点的编号,最后会产生一个长度为$2N$的 ...
分类:
其他好文 时间:
2019-09-14 17:04:45
阅读次数:
99
9.13总结 得分情况 35+30+100=165 Rank2 第二题SPFA被卡了!! T1 在DFS序上dp。 设f[i]\[j]表示当前放了i个点,所在的位置x是DFS序最大的那一个,根到x走了j步。 于是有两种转移,就是x新增一个左儿子(此时j+1),或者是找一个dfs序最大,有左儿子但没有 ...
分类:
其他好文 时间:
2019-09-13 17:55:31
阅读次数:
78
题意:给你一个长度为n的字符串和m组询问,每组询问给出l,r,k,求s[l,r]的第k次出现的左端点。 解法一: 求出后缀数组,按照排名建主席树,对于每组询问二分或倍增找出主席树上所对应的的左右端点,求第k大的下标即可。 解法二: 建立后缀自动机,对后缀树(fail树)作线段树合并可得到每个结点包含 ...
分类:
编程语言 时间:
2019-09-12 23:37:36
阅读次数:
144
HDU - 5770 没想出来, 感觉不应该啊, 没有想到转换成二维上的点的问题。 对于对钥匙和宝藏(u, v), 如果lca != u && lca != v 那么起点从u子树出发, 终点在v子树就能得到贡献。 子树在dfs序下是连续一段, 所以就对应到二维平面一个矩形加上一个数值, 求值最大的点 ...
分类:
其他好文 时间:
2019-09-12 16:30:39
阅读次数:
93