省选模拟59 题解
A. 杨柳
考虑实际上有这样一个结论,棋子之间是互不干扰的。
可以使得最优方案上不存在两个棋子中途碰上的情况。
然后问题就是一个二分图最小匹配,一个简单的想法就是 bfs 然后跑一个费用流,点数不多,边数很多。
另外一个做法是直接在原图上建图跑个费用流,点数很多,边数不多。
经过实验,只有后者比较可行。
B. 景中人
主要没想明白的是,因为只关注最终用了多少个矩形。
所以当确定一个矩形长度边界的时候,最优的高度是可以计算出来的。
然后有这样一个结论,矩形左右边界之间的关系只存在包含和不交。
所以写一个区间 dp。
另外的,为了处理不交关系的矩形,在 dp 过程中记录一下已经处理完了所有 $\leq v$ 的点。
这样每次只要考虑包含所有矩形的那个大矩形,最优的高度肯定是 $\frac{S}{x_r-x_l}$。
C. 钦点
考虑暴力咋做,发现边数太多了。
那就建一些虚点,使每个实点都向虚点连边就可以解决。
然后发现这样一个事情。
虚点和实点之间连成一个菊花,只可以割实点。
和原图可以割所有点是等价的。
前者的边数不是很多,所以就可以做了。
因为要求割一个点之后的最大连通块,这肯定是一个点双问题。
所以缩完点双之后,在最大的连通块中找一下树上的最优的分裂点就结束了。
但是这样没有必要,因为只关注每个割点的每个子树中的实点个数,其实只要在 $tarjan$ 求割点的同时求一下就好了。
然后问题是求所有的约数。
其实可以先预处理出每个数的最小的质因子,然后简单的质因数分解。
容易发现一个结论是,我们只关注质因数次方总和恰好为 2 的合数。
所以总复杂度就是 $O(n * (\frac{log a_i}{log log a_i})^2)$ 的。