读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
一样。。。