<span>省选模拟54 题解</span>

A. space

首先考虑建个图,发现每个点的入度出度均为 $1$,其实就是形成了若干个环排列。

起点为 $(1,1,1,1)$ ,但是最终还要经过一次起点。

所以在 $n \neq 1$ 时,考虑直接无视这个起点,转化为自选起点,但是要花钱来,然后要求经过每个点一次的最小代价。

发现代价显然是 $n^4 + cnt$ ,$cnt$ 表示连通块数。

考虑当前考虑的点在 $A,B,C,D$ 排列中分别形成了大小为 $a,b,c,d$ 的环。

所以环的大小就是 $lcm(a,b,c,d)$ ,环的个数就是 $\frac{abcd}{lcm(a,b,c,d)}$。

所以问题就是 $\sum_{a,b,c,d} \frac{abcd}{lcm(a,b,c,d)}$。

容易发现 $\sum_{i}a_i=n$,所以不同的 $a_i$ 的个数只有根号级别。

所以暴力去做的复杂度是 $O(n^2 log)$的。

然后有一个很神仙的$meet \ in \ the \ middle$做法。

考虑首先合并 $A,B$ 为 $F$,然后合并 $C,D$ 为 $G$,最终合并 $F,G$ 即可得到答案。

但是这个东西仍然不好做,贡献里面有 $lcm(a,b,c,d)$ 无法搞成简单的形式。

然后神仙的做法是考虑 $lcm$ 就是质因数的次数取 $\max$ ,可以转化为其中最小的三项的加和。

所以这个 $\frac{abcd}{lcm(a,b,c,d)}$ 其实就是 $\gcd(a,b) \gcd(c,d) \gcd(lcm(a,b),lcm(c,d))$。

可以认为这里的 $\gcd$ 表示取 $\min$, $lcm$ 表示取 $\max$,然后直接套个莫比乌斯反演就解决了。

 

B. party

考虑枚举最终的连通块。

那么暴力的做法就是跑个二分图最小带权匹配。

但是发现挺难打的,所以考虑树上的一些特殊性质。

然后这种树上匹配问题就有一个套路,考虑每一条边的贡献。

如果这条边割裂的两个子树能自给自足,那么就不产生贡献,否则产生差值的贡献。

然后发现这个玩意搞个子树归并的 dp 就完事了。

假设有 $k$ 个特殊点,那么子树归并的复杂度就是 $O(nk)$ 的。

然后发现其实并不关注根到底是谁,随机 $\frac{n}{k} * log$ 次可以保证很大概率答案是正确的。

这样总复杂度就是 $O(n^2 log)$ 的。

但是这个题更特殊,其实简单地统计父亲方向的贡献即可做到 $O(nk)$ 。

全部评论

相关推荐

11-27 12:43
已编辑
门头沟学院 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务