bzoj4129 Haruna's Breakfast

题目描述

`Haruna`每天都会给提督做早餐! 这天她发现早饭的食材被调皮的`Shimakaze`放到了一棵
树上,每个结点都有一样食材,`Shimakaze`要考验一下她。

每个食材都有一个美味度,`Shimakaze`会进行两种操作:

1、修改某个结点的食材的美味度;
2、对于某条链,询问这条链的美味度集合中,最小的未出现的自然数是多少。即 $\text{mex}$ 值。

请你帮帮`Haruna`吧。

题解

这里补一下树上莫队的坑。

如果这题放在序列上的话,即求一段区间的 $\text{mex}$ 值的话,那就可以莫队+对数字分块即可做到 $O(n\sqrt n)$ 。所以我们不妨考虑一下怎么在树上莫队。

如何把一个序列表示成一棵树呢? $\text{dfs}$ 序?no,这里是一种特殊的欧拉序,它是当访问到一个点的时候加入序列中,当它的子树都访问完的时候再加一次,所以这个序列总共有 $2n$ 个点(即树上每个节点都会被加入两次)。然后我们设 $st[x],ed[x]$ 表示 $x$ 的初始和结束两个位置。

对于询问 $x,y$ ,设 $st[x]<st[y]$ ,于是我们分讨一下:

1.若 $x$ 是 $y$ 的祖先,那对于 $[st[x],st[y]]$ 这段区间来说,只有 $(x,y)$ 这条链上的点会被加入一次,剩下的点都会被加入两次,所以我们只要维护一次的点即可。
2.若 $x$ 不是 $y$ 的祖先,则 $ed[x]<st[y]$ ,那对于 $[ed[x],st[y]]$ 这段区间来说, $(x,y)$ 这条链上只有 $lca$ 没有被加入,剩下的点都被加入一次,其它点都被加入两次,所以特判一下 $lca$ 即可。

这样就完成了树上莫队啦!效率为 $O(n\sqrt n)$ 。

代码正在码中,反正bzoj挂了(其实我想先交上作业)

猜你喜欢

转载自www.cnblogs.com/xjqxjq/p/12411678.html
s
a's