Loading

[ARC108F] Paint Tree

[ARC108F] Paint Tree

前言

复习什么的就留到下周了, 顺便把格式调好

现在把每日一练打了差不多

今天补了一下午的 \(\rm{T2}\) , 终于还是被码力问题击碎了, 不过也还好

这道题是模拟赛 \(\rm{T3}\)

吉司机线段树和左偏树都只能明天搞了, 明天把 \(\rm{C}\) 打了开摆

思路

首先那几个 \(\rm{subtask}\) 都没有 \(\rm{T2}\) 难, 就不管了

然后就是正解思路

首先, 这种题一般要根据答案算方案数
所以我们考虑计算答案等于 \(d\) 的方案数, 至少要求出对于任意一个点, 离他的距离 \(> d\) 的点的位置

解决方法如下


题解摘抄

先求出一条直径, 若直径的两个端点颜色相同, 则最长距离一定为直径
否则, 令两个端点分别为 \(x,y\) , 并钦定 \(x, y\) 不同色
枚举答案 \(d\) , 所有到 \(x\) 距离 \(>d\) 的点颜色必须与 $ y$ 一样, 所有到 $ y$ 距离 $ > d$ 的点颜色必须和 $ x$ 一样

考虑证明为什么要取直径的两个端点
由于 $ x, y$ 是直径的两个端点, 可以发现, 若一个点 $ z$ 到 $ x, y$ 的距离都不超过 $ d$ , 则其到任何一个点的距离不超过 $ d$ , 所以 $ z$ 的颜色并不会对答案产生影响

所以, 定义 $ cnt_i$ 表示到直径两端的距离不超过 $ i$ 的点数 , 定义 $ f_d$ 表示答案不超过 $ d$ 的树的形态数, $ g_d$ 表示答案为 $ d$ 的树的形态数, $ dis_{1/2}$ 表示从直径的两端点出发到其他点的距离
定义 $ L=\max (\min(dis1_i,dis2_i))$ 的意义为, 在所有形态的树中, 最小的答案(同色点对最大距离) , 对于每个点取到直径两端点近的那个颜色即可

最终的总权值为 $ \displaystyle\sum\limits_{i=L}^S g_i\times i$

容易得到 $ f_d=2^{cnt_d}$
。但是我们想要答案等于 $ d$
的树的形态数 $ g_i$
。很明显, 只需要容斥减去 $ f_{d-1}$
即可, 也就是 $ g_d=f_d-f_{d-1}$

注意 $ x,y$
共有 $ 2$
种颜色分配方案。


初步理解

我的理解是, 你要知道对于每个点, 到他的距离 \(> d\) 的点有哪些, 从而通过确定这个点的颜色来确定到他的距离 \(> d\) 的点的颜色, 像是一个连通块的样子
然后你发现一个点是没有用的, 仅当其到任何点的距离都 \(\leq d\) , 联想到直径

你发现确定一个点, 可以递归确定所有到某个点距离 \(> d\) 的点的颜色, 考虑怎么确定
你发现直径 \((x, y)\) 的一个性质
如果 \(dis(u, v) > d\) , 那么一定有 \(dis(u, x) > d\) 或者 \(dis(u, y) > d\) , \(dis(v, x) > d\) 或者 \(dis(v, y) > d\) , 其中 \(u, v\) 异色, 你发现对于两个有用的点, 如果不是异色一定是同色的

具体证明一下, 如果存在 \(dis(u, x) > d\)\(dis(v, x) > d\) , 一定不存在染色, 所以不管这种情况, 还有 \(dis(u, y) > d\)\(dis(v, y) > d\)
分成两种情况讨论

  • \(dis(u, x) > d, dis(v, y) > d\)
  • \(dis(u, y) > d, dis(v, x) > d\)

发现两种情况本质相同, 只是 \((u, v)\) 的顺序问题
我们只考虑 \(dis(u, x) > d, dis(v, y) > d\) , 也一定能考虑到所有点对 \((u, v)\)

分类讨论之后, 你确定 \(x\) 的颜色, 就可以确定所有 \(u\) 的颜色, 确定 \(y\) 的颜色, 就可以确定所有 \(v\) 的颜色, 还是很好做的

还有一个误区是 \(L\) 的计算, 且听下回分解


最终理解

捋一下

\(\rm{subtask}\) 还是跳过, 考试的时候甚至没有想, 大体思路也如下

首先考虑一般性问题, 我们枚举答案 \(d\) , 考虑这种情况下如何分配颜色
发现任意点对 \((u, v) \textrm{ s.t. } \textrm{dis}(u, v) > d\) , 满足 \(u = \overline{v}\)
这个问题怎么处理, 我们丢掉 \(\nexists v \textrm{ s.t. } \textrm{dis}(u, v) > d\)\(u\) 点, 容易证明的是余下的所有点一定可以被确定颜色, 记这些点的集合为 \(\mathbb{V}\)

这里会出现一个问题, 如果让被丢掉的 \(u\) 点随意分配颜色, 那么就变成「至多」答案为 \(d\) , 我们一会再考虑这个问题

考虑剩下的点中如何处理, 特别的, 以下的讨论都仅在 \(\mathbb{V}\) 中进行

暴力思路

\(\forall (u, v) \textrm{ s.t. } \textrm{dis}(u, v) > d\) , 对其建边, 跑二分图染色即可
对于单个 \(d\) , 时空都是 \(\mathcal{O} (n^2)\)

具体的, 如果二分图染色出来无解那么必不存在这种情况, 否则方案数就是不在 \(\mathbb{V}\) 里面的点随意分配颜色的方案数 \(\times 2\) , 意思是二分图的两个部分的颜色可以交换

注意这里的方案数是所有答案 \(\leq d\) 的情况的方案数
所以需要简单容斥

我猜你想用
$\displaystyle f(x) = \sum_{i = 0}^{x} {x \choose i} g(i) \iff g(x) = \sum_{i = 0}^{x} (-1)^{x - i} {x \choose i} f(i) $
但是你容易发现, \(\displaystyle {x \choose i}\) 是不需要的, 所以实际上只需要
$\displaystyle f(x) = \sum_{i = 0}^{x} g(i) \iff g(x) = f(x) - f(x - 1) $
注意这种做法仍然错误, 因为 \(f(x)\) 的计算显然不应该从 \(0\) 开始, 会导致答案错误, 因为本不应该出现这种情况, 处理方式见下

你发现 \(d\) 的合法性是单调的, 考虑二分 \(d\) 找到最早的合法位置记为 \(L\) , 那么 \(L\) 之前的都无解, \(L\) 之后的我们可以正常处理即可, 复杂度 \(\mathcal{O} (n^2\log n)\)
然后如果一个 \(d\) 使得所有点都没有用了, 记为 \(R\) , 那么 \(R\) 之后的都是无解, \(R\) 显然是直径长度
特别的是如果 \(d = R\) , 那么可以乱放, \(d > R\) 都没有意义了

具体的, 把上面的柿子变成
$\displaystyle f(x) = \sum_{i = L}^{x} g(i) \iff g(x) = f(x) - f(x - 1) , x \in[L, R] $
\(f(x) = 2 \times 2^{n - |\mathbb{V}|}\), \(x \neq R\)
\(f(R) = 2^{n - |\mathbb{V}|}\)
现在只需要动态维护 \(i \in [L, R)\) , 符合条件的点集 \(\mathbb{V}\) 即可
你可以用一个堆维护每个 \(u\)\(\max\limits_{u \neq v} \textrm{dis}(u, v)\) , 复杂度 \(\mathcal{O} (n \log n)\)

还要证明二分图联通, 因为不连通需要乘以 \(2^{cnt}\) 而不是 \(2\) , 其中 \(cnt\) 为连通块个数
这个是由直径的性质导出的, 假设直径两端端点为 \(x, y\) , \(\textrm{dis} (u, v) > d \iff \textrm{dis}(u, x) > d \textrm{ or } \textrm{dis}(u, y) > d , \textrm{dis}(v, x) > d \textrm{ or } \textrm{dis}(v, y) > d\) , 因为一定有连边 \((x, y)\) , 所以任意 \((u, v)\) 联通, 如果没有连边\((x, y)\) , 要么就是 \(d = R\) , 要么就无解

正解思路

正解至少要做到 \(\mathcal{O} (n \log n)\)

瓶颈在找 \(L\) , 考虑其意义
太神秘了不考虑了, 这题弄懂这部分通用的就行了

总结

树上距离最大的问题, 往往可以向直径的方向转化
巧妙地地方在, 利用了直径的好性质

这种异色约束, 考虑找性质「异异得正」


常见的枚举答案算方案数的 \(\rm{trick}\)
但是一定要注意答案的意义, 无意义的答案一定不能计算

这种两种状态的约束问题一定要找性质, 一般可以类似 \(\text{2-\rm{SAT}}\) 处理

容斥解决一类算重问题, 这种特殊的可以类似差分处理


复习

这个题好像很复杂的样子, 那我复习

思路

题意

给定一棵 nn 个节点的树, 你需要对每个节点黑白染色

xx 表示白色点之间的最大距离, yy 表示黑色点之间的最大距离,那么定义一种染色的权值为 max(x,y)\max(x,y)
如果某种颜色没有出现那么对应的 x/yx/y 就是 00

求所有 2n2^n 种染色方式的权值和

公式化做题

  • 求多种方式的贡献和
    • 往往更改贡献主题, 求花费对应的操作方式个数

那么我们要计算有多少种操作方式使得 \(\max(x, y) = d\)
也就是说, 对于所有 \(\textrm{dis}(u, v) > d\) 的点对, 都有 \(u = \overline{v}\)
考虑所有这样的点对, 不难发现可以用二分图染色解决存在性, 然后方案数就是 \(2^{cnt}\) 倍的不属于任意点对约束的点随意分配的方案数

但是这样答案是 \(\leq d\) 的, 不一定是 \(d\)
显然需要进简单容斥, 同之前写的

因为我们要计算所有 \(d \in [L, R]\) 的答案, \(L\) 显然二分可知, \(R\) 就是原树上直径的长度
唯一的问题是计算不属于任意点对约束的点的个数
不难发现可以通过直径的性质去做

posted @ 2025-01-17 20:32  Yorg  阅读(30)  评论(0)    收藏  举报