zoukankan      html  css  js  c++  java
  • CF1025G Company Acquisitions

    CF1025G Company Acquisitions [* hard]

    有一棵菊花树森林,每次操作为随机选择两棵树,然后随机将其中一棵的根作为另一棵菊花树的根节点的儿子,然后断开它和它所有儿子的边。

    求这样操作下去,最后他们变成一棵大菊花树的期望次数。

    (nle 500),每个点是根或者是 (x) 的儿子给出。

    Solution

    神仙题。

    考虑更抽象的描述这个题,给定一个序列 (a),保证 (sum a_i=n),每次操作为选择两个点,然后将其中一个变成 (a_i-1)(1),将另一个 (+1)

    接着,本题有一个有趣的事实在于,最后的终止局面一定是固定的,初始局面是给定的,我们希望存在一个描述局面的势能函数 (F(S)) 满足期望意义下,每次操作一定会使得 (F(S)) 增加 (1),假设答案就是 (F(S_{end})-F(S_{begin}))

    对于本题,我们不妨设 (f(x)) 表示当有 (x+1) 个点的时候的菊花树的势能函数,同时规定 (F(S)=sum f(a_i))

    现在考虑每次操作,对势能函数的影响,不难发现改变量即:

    [frac{1}{2}(f(a+1)+(b-1)f(0)+f(b+1)+(a-1)f(0))-f(a)-f(b)=1 ]

    如果规定 (f(0)=0),那么就有:

    [frac{f(a+1)+f(b+1)}{2}-f(a)-f(b)=1 ]

    由于需要对任意 (a,b) 成立,所以这应该是一个统一的关系,所以有 (frac{f(a+1)}{2}-f(a)=frac{1}{2})

    所以 (f(a+1)=1+2f(a))

    不难得到 (f(x)=2^x-1) 的答案。

    所以最终局面为 (f(n-1)),得到答案是 easy 的。

  • 相关阅读:
    用硬件卡克隆Linux集群
    基于Linux系统WINE虚拟机技术的研究
    Rpm另类用法加固Linux安全
    基于TC技术的网络流量控制实战
    开源世界里的七剑
    借Stunnel工具保护E-mail服务器
    如何应对DDOS网络攻击(之二)
    如何应对DDOS网络攻击
    Leetcode-983 Minimum Cost For Tickets(最低票价)
    Leetcode-413 Arithmetic Slices(等差数列划分)
  • 原文地址:https://www.cnblogs.com/Soulist/p/13841460.html
Copyright © 2011-2022 走看看