树的难题 BJOI2017 点分治 单调队列

2022/8/30 23:52:53

本文主要是介绍树的难题 BJOI2017 点分治 单调队列,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

P3714 [BJOI2017]树的难题

没时间码 先口胡。

明显有一个n^2的暴力。可以拿到20分。

链的情况也非常容易 一个简单的单调队列 就可以解决 当然可以暴力的采用线段树。
这样可以拿到40分。

对于60分 直接考虑线段树合并 利用线段树维护每种颜色的最大值 由于不考虑边数问题。

对于80分 由于总颜色很少 考虑每个点处开颜色个数颗线段树维护深度。

利用线段树合并再每个颜色单独做 复杂度大概两个log的样子 可以过80

不过以上均为口胡没有实现。

考虑100分 容易发现线段树合并失效了 至少需要线段树套线段树才能同时维护边数和颜色。

考虑上点分治来维护边数这个限制。

对于一个重心x 我们将所有的链抽出来进行两条链之间的合并。

分为两种同颜色的合并 不同颜色的合并。发现同时做非常难以处理。

但是我们调换顺序将同颜色的放一块处理 处理时使用单调队列维护即可。

复杂度 nlogn 代码咕咕咕。



这篇关于树的难题 BJOI2017 点分治 单调队列的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程