CF868E
CF868E
换个角度思考的题,不是很难。
题意
一个 $n$ 个节点带边权的树,警察从 $s$ 出发,树节点上有 $m$ 个位置位置(可能重复)有小偷,如果警察和一个小偷在同一个节点那么这个警察就把小偷抓到了。警察的移动速度是 $1$,小偷可以瞬移。问警察能否抓到所有的小偷,如果能求最快多久。
$n,m\le 50$。
Sol
首先显然一定有解,实在不行警察硬着头皮一个小偷一个小偷抓,因为是在一棵树上一定能够抓到。些简单的观察发现,小偷苟在叶子节点一定是不错的选择,这样可以甩警察尽可能远。
反过来想,警察每次抓到小偷一定是在一个叶子节点。这时候可能还会剩下一些小偷,由于警察是在一个叶子节点,那么剩下小偷可以趁这个时间随意调整位置,让警察再次出发的时候消耗时间最多。因为可以随意移动,我们不妨设 $f_{u,i}$ 表示警察目前在 $u$ 这个叶子节点,还剩下 $i$ 个小偷,他们调整完之后警察最短多少时间可以抓到小偷。
状态很理想,考虑如何转移。假设剩下的每个叶子节点的小偷数量已经确定了,为 $c_u$,转移式就应该是 $f_{u,i}=\min\limits_{v\in leaves,u\neq v}dis(u,v)+f_{v,i-c_v}$。而此时小偷还有机会调整每一个位置的 $c_u$,所以这个转移还不确定。反过来考虑问题,小偷希望 $f_{u,i}$ 尽可能大,那么直接二分这个值,然后判断小偷能不能构造出来一种方案达到这种值。设目前二分的值为 $lim$,检查的时候贪心,在满足 $dis(u,v)+f_{v,i-c_v}\ge lim$ 的条件下让 $c_v$ 尽可能大。
最后统计答案,由于起始的位置不一定是叶子,但是这影响并不大,因为这个条件对于小偷的唯一限制就是一个小偷不能跑出其所在的子树。那么开始的时候记录一下每一个子树中小偷总数然后再贪心即可。
复杂度 $\mathcal{O}(n^4\log ans)$ 其实还可以优化,因为 $f_{u,i}$ 随着 $i$ 增大是单调递增的,找 $c_v$ 最优解的时候也可以二分。

浙公网安备 33010602011771号