zoukankan      html  css  js  c++  java
  • ZJOI2020 传统艺能

    考场上最后1h才会,成功没写完。

    先考虑个暴力,(f_{i,j}) 表示 (i) 次操作后 (tag_j=1) 的方案数,(g_{i,j}) 表示 (i) 次操作后 (j) 号点到根的路径上的点 tag都是0 的方案数。
    定义终点,途径点,终点子树(不含终点),途径点儿子(不含途径点),途径点儿子子树(不含途径点,途径点儿子)为字面意思。
    (G=g_{i-1,j},F=f_{i-1,j},g=g_{i,j},f=f_{i,j},mul=(frac{(n+1)*n}{2})^{i-1})
    对于每种可能的操作,有如下转移:
    对于终点,(f+=mul)
    对于途径点,(g+=mul)
    对于终点子树,(f+=F)
    对于途径点儿子,(f+=mul-G,g+=G)
    对于途径点儿子子树,(f+=F,g+=G)

    发现每个点独立,k很大,考虑对每个点做矩阵快速幂。
    设终点,途径点,终点子树,途径点儿子,途径点儿子子树数量分别为(c1,c2,c3,c4,c5)

    [egin{bmatrix} f & g & mul end{bmatrix} = egin{bmatrix} F & G & mul' end{bmatrix} imes egin{bmatrix} (c3+c5) & 0 & 0 \ -c4 & c4+c5 & 0 \ c1+c4 & c2 & frac{(n+1)*n}{2} end{bmatrix} ]

    如果求出了c*,答案可在 (O(3^3nlogk)) 内求出。
    求c*实际上只需求出c1,c2。
    可以通过某个线段树上经典结论在 (O(n)) 内求出(这过几天再补做法)

    代码

  • 相关阅读:
    Linux 技巧:让进程在后台可靠运行的几种方法
    What is /dev/null 2>&1?
    In the shell, what does “ 2>&1 ” mean?
    Linux命令之umask
    /dev/null简介
    What is special about /dev/tty?
    sed用法
    cobbler 更换dns和dhcp服务器为dnsmasq
    Linux下如何退出vim的一些常用命令总结
    nginx部署vue项目
  • 原文地址:https://www.cnblogs.com/Frame233/p/13169809.html
Copyright © 2011-2022 走看看