zoukankan      html  css  js  c++  java
  • 省选模拟54 题解

    A. space

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

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

    所以在 $n eq 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)$ 。

  • 相关阅读:
    FastDFS集群安装说明
    关于Sentaurus的日常(一)(Basics)
    关于Sentaurus的日常(三)
    记录程序运行时间之clock 函数
    Mysql 使用经验 2013
    proxy ip 收集方式总结
    操作系统的默认格式的陷阱
    VNC server 使用手记
    div body 间距
    asp.net处女作
  • 原文地址:https://www.cnblogs.com/skyh/p/12571004.html
Copyright © 2011-2022 走看看