zoukankan      html  css  js  c++  java
  • CF1528

    CF1528

    A

    可以发现答案只会在 (L_i/R_i) 处取到。

    B

    可以发现递推式:(f_i=S_{i-1}+d_i)

    C

    对第一棵树 dfs,在第二棵树上贪心:能加入则加入,否则去替换其一个祖先。

    D

    假设能够在时刻 (i) 访问 (v),那么可以在时刻 (i+t) 访问 (v+tmod n),枚举起点,然后跑一个 (mathcal O(n^2)) 的 dij 即可,这里计算某个点的最小出边需要单独处理一下。

    E

    可以发现答案只有 3 类:外向树,内向树,一个外向树和内向树拼在一起。

    第一类和第二类的主体是每个点儿子数不超过 (2) 的外向树方案数:转移由 burnside 定理给出:(f_i=f_{i-1}+frac{1}{2}(S_{i-1}^2-S_{i-2}^2+f_{i-1}))

    计算答案的时候和烷烃计数一致,枚举 (3) 种情况转移即可,乘以 (frac{1}{6})(由于根节点的 deg 可能为 (3)

    外向树和内向树拼起来的时候,可以发现有多个点可以作为分界点,但合法的方案一定满足内向树的部分根节点度数为 (2),且外向的边的度数为 (1),这个部分的贡献为 ((f_{i}-f_{i-1})(f_{n-i-1}-1))(减去单独一条链的情况)


    F

    我们构造一个长度为 (n) 的序列(一排座位),对于每个 (a_i),令第 (i) 个人走到 (a_i),然后往后移动至第一个空座位。(CF838D)

    我们可以发现这样的一个策略和一个合法的序列是双射,添加一个辅助节点,并连接成一个环,可以发现只要 (n+1) 为空就有合法的方案,因此答案为 ((n+1)^{n-1})

    接下来我们有一个重要观察:任意一个非法的方案都可以映射到一个合法的方案。

    这是因为对于任意一个非法的方案,设 (x) 为其抵达的空位置,则令 (a_ileftarrow (a_i+(n+1)-x)mod (n+1)+1) 可以实现将其逆时针旋转 (x) 位的结果。

    换而言之,我们直接对 (a_iin [1,n+1]) 的序列进行计数,然后将答案乘以 (frac{1}{n+1}) 即为答案。

    现在,问题已经相当明朗了,答案就是:

    [egin{aligned} &frac{n+1}{n+1}sum_iinom{n}{i}i^kn^{n-i} \&=sum_i inom{n}{i}n^{n-i}sum_j egin{Bmatrix}k\jend{Bmatrix}i^{underline{j}} \&=sum_j egin{Bmatrix}k\jend{Bmatrix}n^{underline{j}}(n+1)^{n-j} end{aligned}]

  • 相关阅读:
    31 把数组排成最小的数 + 仿函数的写法就记忆这个就行了
    30 整数中1出现的次数(从1到n整数中1出现的次数)这题很难要多看*
    29 连续子数组的最大和
    c/c++ struct的大小以及sizeof用法
    28 最小的K个数
    27 数组中出现次数超过一半的数字
    26 字符串的排列
    Python 实例2—购物车
    python_threading模块实现多线程详解(转)
    Ubuntu 16.04 安装Postman
  • 原文地址:https://www.cnblogs.com/Soulist/p/14818648.html
Copyright © 2011-2022 走看看