CF1943C Tree Compass

打印 上一主题 下一主题

主题 956|帖子 956|积分 2868

思路:

考虑往直径方向想,设直径的长度为 \(d\)。
首先可以留意到一个性质:

  • 每次操作最多只会覆盖住直径的 \(2\) 个点,那么答案的下界即为 \(\lceil \frac{d}{2} \rceil\)。
分类讨论一下。
若 \(d\) 为奇数,则存在唯一的一个直径中心 \(u\):

  • 那么答案为 \((u,0),(u,1),\cdots,(u,\lceil \frac{d-1}{2} \rceil)\)。
  • 最优次数是 \(\lceil \frac{d}{2} \rceil\) 次。
若 \(d\) 为偶数,则存在两个直径中心 \(u,v\):

  • 若 \(d \bmod 4 = 0\) 时:

    • 那么答案为 \((u,1),(v,1),(u,3),(v,3),\cdots,(u,\frac{d}{2}-1),(v,\frac{d}{2}-1)\)。
    • 最优次数是 \(\frac{d}{2}\)。
    • 如许是两者是完全错开的。

  • 若 \(d \bmod 4 = 2\) 时:

    • 那么答案为 \((u,0),(u,1),\cdots,(u,\frac{2}{d})\)。
    • 最优次数是 \(\frac{d}{2}+1\)。

这里证明一下为什么当 \(d \bmod 4 = 0\) 时不能取到答案的下界。
留意到若 \(x,y\) 能被同时取到当且仅当 \(\operatorname{dis}(x,y)\) 为偶数。
设 \(L\) 为直径的一个端点,那么 \(\operatorname{dis}(L,x)+\operatorname{dis}(L,y)\) 的奇偶性等价于 \(2*(奇数/偶数)+偶数=偶数\)。
由于 \(d \bmod 4 = 2\),所以 \(\sum \operatorname{dis}(L,i) = \frac{d \times (d-1)}{2} \bmod 4 = 1\),则这个和式一定不是偶数,故无法到达下界。
时间复杂度为 \(O(TN)\)。
完备代码:

[code]#include#define Add(x,y) (x+y>=mod)?(x+y-mod)x+y)#define lowbit(x) x&(-x)#define pi pair#define pii pair#define iip pair#define ppii pair#define fi first#define se second#define full(l,r,x) for(auto it=l;it!=r;it++) (*it)=x#define Full(a) memset(a,0,sizeof(a))#define open(s1,s2) freopen(s1,"r",stdin),freopen(s2,"w",stdout);using namespace std;typedef double db;typedef unsigned long long ull;typedef long long ll;bool Begin;const ll N=2e3+10;inline ll read(){    ll x=0,f=1;    char c=getchar();    while(c'9'){        if(c=='-')          f=-1;        c=getchar();    }    while(c>='0'&&c
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

勿忘初心做自己

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表