7.8考试总结
T1
其实是个简单题,但是我比较唐,所以导致一直没有用暴力打表,以为有更好的办法,所以导致浪费了大量时间,显然的是考虑有几组平行的直线,算它们对答案的影响即可。我们可以考虑为二维背包问题,用dp做就好了,时间复杂度有点不对,没关系,\(n\le120\) 打表就行了。
T2
更愚蠢的错误,首先我发现了 \(b_i+b_j\le 2n\) 所以我知道 \(min(a_i,a_j)\le\sqrt {2n}\) ,但是我脑海中浮现的是用 \(\sqrt {2n}\) 种不同的值,发现自己不会做。最后没有别的思路就打暴力跑路了。赛后发现,我们可以枚举较小的 \(a_i\) ,然后遍历两遍,分别处理 \(a\) 值相同的贡献,和对 \(a\) 值更大的贡献。复杂度是 \(o(n\sqrt n)\) 。
T3
以为自己会了模拟最大流,现在发现自己掌握的还是不好。
首先最大流的建模是明显的,问题是现在中间的边与左右两边都有关,但是我们显然不能直接记录左边选了那些边。但是我们还能发现只关心左边选的点的编号和记录或枚举这个是可行的。因为任意两点之间都右边,所以我么可以枚举左边割掉的编号和 \(k\) ,那么右边的割的就是 \(min(kj,b_j)\) ,从小到大枚举的话,右边割的代价是可以快速算。左边的代价可以用dp来实现,然后就做完了。
在题解区学了一种形式化的做法,我们可以将最小割转化为我们要枚举两个子集(表示与 \(S\) 相连和与 \(T\) 相连的情况 ),使得割掉的边代价最小。然后我们就可以化式子来做模拟最大流的题。比如这道题,
T4
有点意思的题。首先我们发现记录每个深度最大的 \(b\) 和 \(c\) 就可以较为快速的求出答案。然后因为我们维护的是深度相关,所以我们可以考虑长链剖分维护。加上长链剖分后时间复杂度已经变成 \(O(nk)\) 常数小能过。然后我们考虑,我们要的是一段区间的最大值并且这个区间只能在结尾加数,所以我们可以维护一个 st 表来做,然后暴力合并,可以通过长链剖分的时间复杂度来证明每个点只会被用一次,总时间复杂度是 \(O(n\log k)\) 。

浙公网安备 33010602011771号