- https://codeforces.com/contest/1648
- https://zhuanlan.zhihu.com/p/476724675
- https://zhuanlan.zhihu.com/p/476735877
B. Integral Array
判断一个序列中是否存在较大数除较小数下取整不属于该序列的情况。
有点上次 Tourist Round B 题 的既视感,注意这次别再写成 O(nsqrtn) 了 。。。
D. Serious Business
给定三行数字,要求左上到右下,只能向右 和 向下,方格取数,初始中间一行是关闭的,然后有 m 个操作,每次中间打开一个区间,
你可以从中选一些操作,要求使得最后方格取数的结果最大。
这个题我觉得出得非常不错,首先读完题目几乎把我要用分治告诉你了,那么第一感觉是去写线段树 dp。。。
但是具体怎么写。。。居然想不出来怎么做。。。
赛后看了一下果然就是线段树 dp …(也有人 cdq 分治。。)
https://codeforces.com/contest/1648/submission/148591405
首先我们不妨弱化一下问题,给一个覆盖整个区间,且代价为 0 的操作,那么显然可以线段树,方法类似 GSS 系列,简单区间合并。。。
然后就是这个题厉害的地方,我们可以离线处理所有操作,对于每个操作,对这个操作所覆盖的区间进行询问,紧接着,将这次操作所产生的影响,加回到线段树里。。。
我觉得这个想法还是蛮奇妙的。。。
E. Air Reform
给定一个边权图,定义其补图的权值为原图上连接两点的路径中,边权最大值的最小值。问用同样的方式再从补图得到原图后,每一条边的权值。
我们只要求出补图的最小生成树,就可以简单的求路径上的最大值得到最终的边权。
于是我们只需要求出补图的最小生成树即可,而这个可以简单魔改一下 Kruskal。。。
是不是感觉有点像 #767 的 E 题?
F. Two Avenues
给定一个图,初始所有边权为 0,你可以选择其中两条边,将它们的边权修改为 1。
给定 k 对点对,定义点对的距离,为连接这两个点的一条路径,使得经过的权值和最小。
问如何选择这两条边,最大化 k 对点对的距离和。
额,树上我会做!