沈阳站赛前的最后一把 \(VP\) ,希望能在沈阳站偷到牌子qwq。。。
赛时 \(4\) 题,高罚时,输在 \(E\) 题开出来得太慢了。
\(A,K\) 纯签到。
\(E\): 显然所在楼层越高越有利,那么当前只要我们有免费上升的机会,就可以贪心地用掉这个机会。将所有区间按照左端点升序排序,遇到左端点比当前所在楼层小,右端点比当前楼层大的区间就直接使用,直到没有可再使用的区间。若还剩下一些左端点大于当前楼层的区间,那么没有办法,我们只能通过额外花费来到达这些区间。不断重复上述过程,直到到达可上升的最高点 \(\max_{i=1}^{n} r_{i}\)。此时,剩下没有使用的区间的左端点均比当前位置低,我们一定可以按照这些区间右端点降序的顺序依次免费使用这些区间。按照上述方式模拟即可。
code
\(H\):一道看着唬人但是不难的构造题,赛时最后 \(10min\) 出的,希望后天比赛也能有这样的运气和发挥。容易猜到让最长重链的链头作根节点一定最优。我们发现最长的重链如果只有唯一一条,就可以这样构造:让这条重链的链头成为根节点,其他的重链都接在这个链头下面。于是我们考虑出现多条最长重链的情况。
我们发现:如果存在一条非最长链可以接在根节点所在重链的重儿子下方,那么这个重儿子的子树大小至少为最长重链的长度。此时再将其他重链接在根节点下方,一定不会影响这个重儿子。容易发现,这条非最长链的长度必须 \(\leq L_{max} - 2\)。否则一定无解。具体细节见代码。
code
M. Make It Divisible
貌似要用到笛卡尔树,以后有时间再补。
code
F. Fuzzy Ranking
\(SCC\)
code
B. Barkley III
线段树上二分
code