AT_arc108_f [ARC108F] Paint Tree

发现同颜色最远点对一定有一点在直径 SS 上。

这下找到直径,算每个点到直径的两种距离。

然后枚举最远点对长度 dd,根据两种距离跟 dd 的大小关系,我们可以知道一个点选的方案数。

然后我们考虑容斥。

记答案为 wifi\sum w_if_i 的形式,表示最远点对为 wiw_i 的方案数为 fif_i

对于一个 xx,我们计算 g(x)=[wi>x]fig(x)=\sum [w_i> x]f_i,则答案为 x=0S1g(x)\sum\limits_{x=0}^{S-1} g(x)

我们钦定直径的颜色不同。

mn=max(min(d1i,d2i))mn=\max(\min(d1_i,d2_i)),即最远点对的最小值。

对于 x[0,mn)x\in [0,mn)g(x)=2ng(x)=2^n

对于 x[mn,S)x\in[mn, S)g(x)=2n[wix]fig(x)=2^n -\sum [w_i\le x]f_i,减去的就是最远点对 x\le x 的方案数。

对于点 ii,如果它满足 max(d1i,d2i)x\max(d1_i,d2_i)\le x,则它两种颜色都可以染;否则它只能染一种。记满足前者条件的点有 cntcnt 个,则 [wix]fi=2cnt+1\sum[w_i\le x]f_i=2^{cnt + 1},还有对直径颜色的分配。

posted @ 2023-11-05 11:53  蒟蒻orz  阅读(1)  评论(0编辑  收藏  举报  来源