读ZJ NOIP2018 D1感想

读ZJ NOIP2018 D1感想

road

大家都是 max(0,a[i]-a[i-1]) 的贪心?

还有一个是最小值分治。无伤大雅吧。

money

大家都是 f[i]|=f[i-a[j]] 的背包?

我还是太菜了啊。只好白白丢40分。

track

思路:首先最小值最大果断二分。

然后怎么\(check\)呢?

首先我们知道在\(u\)这个子树中从\(u\)开始的链们只有三种去处:

  • 作为从\(u\)往下的唯一的链为父亲服务
  • 和另一个链合并成一条整链,但必须超过二分出的最小长度minL
  • 悲惨地扔掉

然后呢我们可以把\(u\)所有儿子们挂出来的链都放到个multiset或者vector

(但是好像用vector的是\(O(n^2)\)\(check\)复杂度?随机树可以跑得飞快,但是恶意卡就不太行了吧

然后我们把\(x\)\(x+y \geq minL\)的最小的\(y\)配对,然后没有配对的就只能作为第一种链来处理。

这样就好了。如果用vector的话还需要用链表来处理没有配对的链们。要不然就得用two pointers

好像只有ZJ_0215一个人用了multiset

要我写的话说不定会写成set。。。那样就很惨了。。。

所以还是要好好考虑一下有没有重复。。。

或者#define set multiset?治标不治本。。。

就和#define int long long一样。。。

猜你喜欢

转载自www.cnblogs.com/denverjin/p/10837655.html