Turtle and Paths on a Tree
题目
将一棵二叉树剖成若干条链,满足链覆盖所有的边有且只有一次,求所有链的\(mex\)的最小值
题解
设\(f[u][i]\)为以\(u\)为根的子树内,除了向\(u\)子树外延伸的路径以外,其他所有路径的\(mex\)的最小值,且钦定这条路径的答案就是\(i\),因为我们可以将题面的\(mex\)转化为不在这条路径上的数,这样求\(mex\)也是对的
考虑\(n^2\)DP,直接分情况讨论
若\(u\)为叶子节点,
若\(u\)有一个子节点
设 \(\text{minx}=\min\limits_{i\neq a_u}{f_{x,i}+i}\)
若\(u\)有两个子节点
设 \(\text{minx}=\min\limits_{i\neq a_u}{f_{x,i}+i},\text{miny}=\min\limits_{i\neq a_u}{f_{y,i}+i}\)
\(k=\min(\min\limits_{i \neq a_u}{(f_{x,i}+f_{y,i}+i),\text{minx} + \text{miny}})\)
这是我们看数据范围\(n<=25000\)
感觉有点奇怪,感觉像用\(bitset\)优化的那种数据范围,但这道题不可能用\(bitset\)优化
所以我们充分发挥人类智慧,猜测\(mex\)上界
我们以下证明mex最大不超过\(\frac{n}{\ln n}\)
证明
我们想一下什么时候可以使一条路径的\(mex\)尽可能大,我们发现当点数越大是\(mex\)可能会增大
所以为链的时候,能比树的时候造成更大的\(mex\)
我们只要证明链的答案小于等于\(\frac{n}{\ln n}\)
所以考虑在一条链上的数为\(x1,x2,x3,......,x_{n-2},x_{n-1},x_{n}\)
那么我们枚举数\(x\),设\(x\)的出现次数为\(c_x\),那么序列最多分成\(c_x+1\)个不包含\(x\)的序列,这部分代价最多为\(x\)
再将x带上左右两边的数,这部分代价最多为4
所以\((c_x+1)*x+c_x*4 \ge t\)
放缩得\((c_x+1)*(x+4) \ge t\)
所以得到\(c_x \ge \left\lceil\frac{t}{i + 4}\right\rceil - 1\)
而\(x \ge 4\)则可以变为\((c_x+1)*x+c_x*3 \ge t\)
放缩得\((c_x+1)*(x+3) \ge t\)
所以得到\(c_x \ge \left\lceil\frac{t}{i + 3}\right\rceil - 1\)
所以$$
n = \sum\limits_{i \ge 1} c_i \ge \sum\limits_{i = 1}^3 (\left\lceil\frac{t}{i + 4}\right\rceil - 1) + \sum\limits_{i \ge 4} (\left\lceil\frac{t}{i + 3}\right\rceil - 1)
$$
二分得到\(t\),做完了
或者从上面证明\(n\)大概为\(t \ln t\),所以做完了

浙公网安备 33010602011771号