模拟19 题解

A. count

结论题

一棵树可以被分为d块,

当且仅当子树节点个数和为d的倍数的节点有$\frac{n}{d}$个。

对于任何一个树,size为d的倍数的节点个数不会超过$\frac{n}{d}$个。

在以上情况下,在每个符合的节点与父亲的路上截断,是一种合法方案。

故得证。

 

 

 

B. Dinner

将圆上的序列划分为k段连续的区间,使区间总和的最大值最小。

显然的二分答案。

然而验证需要$O(n^2)$。

倍增预处理出每个点向后延伸$2^k$段能到达的节点。

于是对于每次验证,预处理和查询的复杂度都为$O(nlogn)$,

总复杂度$O(nlog^2n)$,

应当积累的是倍增的思想,与一些快速幂,映射都常结合使用。

 

 

 

C. chess

建图,发现图中存在点权为0和点权1的点。

定义不同的路线为经过至少一个不同的点权为1的点。

将点权为0的点缩掉,

也就是说,如果存在a->b->c,其中b的点权为0,直接由a向c建边。

之后直接最短路计数即可。

posted @ 2019-08-14 14:09  skyh  阅读(162)  评论(1编辑  收藏  举报