• cojs 疯狂的重心 疯狂的机器人 题解报告


    疯狂的重心

    话说做过幻想乡战略游戏的人应该很容易切掉这道题目吧

    我们考虑一棵树如果添加了一个叶子,那么其重心最多向叶子方向移动1的距离

    而是否移动我们只需要记录子树中有多少个点就可以判断啦

    也就是说这个叶子对于时间复杂度的贡献是1

    那么我们考虑每次在x-y上添加一条边,等于将x所在的树和y所在的树合并

    这一步我们可以采用启发式合并,每次把小的向大的里插

    这样暴力合并的时间复杂度是O(nlogn)

    也就等价于我们最多插入单个节点O(nlogn)

    那么对于重心的计算显然也是O(nlogn)的

    那么现在的瓶颈就是如何动态的维护子树中有多少个节点

    对于这一步我们可以采用LCT维护,每次暴力合并之后链修改即可

    在合并之后再暴力移动重心就可以辣,细节比较多也比较烦

    不过主体都是暴力QAQ

    疯狂的机器人

    做了做BC上周的题目,有个裸的默慈金数

    可以直接O(n)递推得到,做完之后一直想着能不能用FFT搞一搞

    然后就把题目变了个形,但是并不知道有没有大神有O(n)递推的神做法

    首先我们考虑操作中哪些操作走,设走的操作有i个

    再考虑走的操作中哪些是向上走,设向上走的操作有j个

    我们很容易发现当只能向右和向左走时,这个题实际上是合法进出栈序列,也就是卡特兰数

    只能向上和向下走的时候也同理

    很容易得到ans=sigma(C(n,i) *sigma( C(i,j) * f(j) * f(i-j)))

    其中f(i)我们定义为当i为奇数时,f(i)=0

    当i为偶数时,f(i)=catalan(i/2)

    令g(i)=sigma(C(i,j) *f(j) *f(i-j))

    不难发现这是个卷积形式,直接NTT即可

    之后ans=sigma(C(n,i) *g(i) )

    我们这一步直接枚举i计算其实就可以了

    不过实际上这还是个卷积形式,依然可以NTT

  • 相关阅读:
    第03组 Alpha冲刺(3/6)
    第03组 Alpha冲刺(2/6)
    第03组 Alpha冲刺(1/6)
    团队项目-选题报告
    第3组 团队展示
    福大软工 · BETA 版冲刺前准备(团队)
    Alpha 事后诸葛亮
    Alpha冲刺
    Alpha冲刺-(9/10)
    Alpha冲刺
  • 原文地址:https://www.cnblogs.com/joyouth/p/5438373.html
Copyright © 2020-2023  润新知