• 20200721训练记录


    打了 Comet OJ - Contest #6的 D E F 三道题

    A感觉跟原来的一个题有点类似就是每种深度分开讨论,但是根节点感觉需要特殊讨论就先放了

    B拿到题先用SA写了个(O(n^2))暴力,然后发现是一个后缀和起始位置在它后面一堆后缀的lcp作贡献,于是考虑单调栈,发现只能后面对前面作贡献,就CDQ分治一下,时间是(O(nlogn))

    结果实现起来要维护五个东西细节巨多,写了2h写出来跑得跟(O(nlog^2n))的后缀树上树剖一样快

    C神仙题,ztc巨佬在oeis上找到了数列,但是网站上并没有通项公式

    结果最后就过了B,zbl

    A最后发现其实只需要维护答案>=i的就可以了

    然后深度<=i的就只能取一个

    然后深度>i的就每层单独讨论。

    按dfn序把这些点排个序

    (f(i,j))为dfn排i的和排j的点相遇的时间

    那么(f(i,j)=max_{k=i+1}^{j} f(k-1,k))

    于是按大小排个序并查集维护一下相遇时间<i的连续段就好了

    那么每个连续段最多选一个数乘起来可以得到答案

    C是数析合树,自闭

    丢个大佬的学习笔记link

    其实就是数根节点是析点,根的所有儿子都是叶节点的析合树的个数

    考虑他的生成函数是(F(x))

    考虑i个数的排列的生成函数

    [H(x)=sum_{i>=1}i!*x^i ]

    那么根据析合树的性质,析点的儿子可以是任意析点合点或叶子

    所以所有根节点是析点的析合树个数的生成函数(P(x))就满足

    [P(x)=F(H(x)) ]

    大概就是每个叶子换成一棵子析合树

    我们考虑求根节点是合点的析合树个数

    把子树大小顺序从小到大和从大到小分开讨论

    显然这两个是相同的

    不妨设从小到大的生成函数是(G(x))

    那么就有

    [P(x)=H(x)-2*G(x)-x ]

    这个(x)是扣掉单个点的析合树

    考虑计算(G(x))

    如果一个析点为根

    那么他的子树中不能存在和他相同顺序的析点

    所以

    [G(x)=sum_{i>=2}(H(x)-G(x))^i ]

    解之得到

    [G(x)=frac{H(x)^2}{1+H(x)} ]

    写个多项式求逆就好了

    那么我们知道了(H(x))(P(x))(F(H(x))=P(x))怎么算([x^n]F(x))

    考虑扩展拉格朗日反演

    丢个大佬的总结link

    反正最后就是

    [[x^n]F(x)=frac{1}{n}[x^{n-1}]frac{P'(x)}{(frac{H(x)}{x})^n} ]

    写个多项式快速幂可过

    加油!继续自闭

  • 相关阅读:
    cpu降频问题
    配置 logrotate 指导
    Ubuntu 和 Ros 对应版本关系
    Git 文件管理
    Win10(UEFI启动) 安装Ubuntu16.04双系统
    Clion ROS开发环境设置
    clion 创建快捷方式和配置ros开发环境
    Ubuntu 16.04安装 CastXML
    eigen3 版本信息查看
    ubunutu eigen3包的查找
  • 原文地址:https://www.cnblogs.com/deaf/p/13357247.html
Copyright © 2020-2023  润新知