20220617练习
1.P1197星球大战
主要思路为难以从正向维护删边的连通块,就从逆向维护加边的连通块。
2.P5022旅行
首先从“任意选定一个城市作为起点,然后从起点开始,每次可 以选择一条与当前城市相连的道路,走向一个没有去过的城市,或者沿着第一次访问该 城市时经过的道路后退到上一个城市。当小 Y 回到起点时,她可以选择结束这次旅行或 继续旅行。需要注意的是,小 Y 要求在旅行方案中,每个城市都被访问到。”可以看出来其实就是求一个字典序最小dfs序。
但基环树该怎么办?
我们可以发现无论如何基环树上一定有一条边不会被经过,所以可以暴力枚举被删除某一条的边。
3.P2906 Cow Neiborhoods G
首先看到距离可以下意识想到可转为切比雪夫距离。
然后可以尝试证明一种连边方式,然后发现可以将一个点连向x值靠前(保证不会重复连边)并且y值与它最近的两个点(一上一下)
①为什么这样是正确的:
因为举不出反例所以是对的。我们首先以之前的连边都以正确维护为前提,我们发现对于该点一定能进入左下方的一个连通块内,而对于自己覆盖内的其他点,一定在之前被加入了此连通块内。
②为什么可以这样思考:
首先一定可以猜测是把每一个点和某几个特殊点连接从而保证连通块的正确性。首先可以贪心猜想朝某一个方向中最远的去连接。
距离问题中的两种距离测量方法可以相互转化。对于曼哈顿距离的优势在于可以将一个坐标压缩为一个和来判断距离,但需要分类讨论四个方向;而切比雪夫也只需考虑某一个坐标,但只考虑某一坐标之前要确保另一个坐标之差要小于前一个(或者证明无需考虑)
4.P2943 Cleaning Up G
首先可以想到一个朴素的dp,其中dp[i]=min(dp[j]+sm^2)(sm为j至i内不同个数,可实时维护),复杂度O(n^2)
我们发现只要优化到O(n^1.5)就可以了。
sm^2???
而答案最小为n(全分开)
所以只需维护几个向前最远的sm等于1~sm^0.5即可
5.P5290 春节十二响
简述题意,把每一个点的内存分至不同的段内,其中每一段内不能包括某一点及其后代,使每一段内的最大值之和最小。
首先,我们可以发现对于一对兄弟可以进行合并,合并方法显然,按段大小排,从上往下依次维护两者取max合并;而某一点不能被放入它子树中任何的点内,于是只能另开一段。
但每次由儿子合并至父亲都是O(siz)的。
于是有一个高科技:启发式!!!
把小的合并到大的上。......
然后就过了你的敢信
证明:
对于每一个点,他只会被作为小的进行合并一次,因为对于每一坨子作为小的向上合并时,都可以看作下面的每一个未被合并(因为为大块)的siz,所以总复杂度相当于每一个点只被合并了一次,加上实时排序(堆)的复杂度,总复杂度为O(nlogn)

浙公网安备 33010602011771号