省选模拟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)$ 的。

posted @ 2020-04-01 22:06  skyh  阅读(100)  评论(0编辑  收藏  举报