zoukankan      html  css  js  c++  java
  • CF1060F

    题意见 (link)

    Solution

    先枚举根为 (mathbf{root})

    类似的,我们将 "删边" 视为合并两个点,如果其中存在 (u) 所在的连通块,那么产生 (frac{1}{2}) 的贡献。

    (f_{u,i}) 表示考虑以 (u) 为根的子树,所有可能的删边序列,仅考虑最后 (i) 条边的情况下的贡献和,答案即 (frac{f_{root,n-1}}{(n-1)!})

    考虑计算答案,现加入一条 (u o v) 的边,这样我们需要枚举这条边是第倒数 (j) 条被合并的边,同时考虑转移得到 (f_{u,i})

    1. 假定 (jle i),那么我们发现在 (j) 之前合并的边都对答案没有影响,所以有贡献的仅为最后 (j-1) 条边,故 (f_{u,i}leftarrow f_{v,j-1} imes frac{1}{2})
    2. 假定 (j> i),那么这条边对答案没有贡献,且有贡献的只有最后 (i) 条边,故 (f_{u,i}leftarrow f_{v,i})

    我们令 (g_i) 表示只考虑这棵子树时的 (f_{u,i})

    现在考虑合并两颗子树的答案,我们只需要枚举最后 (i) 条边来自此子树的边的数量,令 (i'=i+j),那么不难得到:

    [f_{u,i'}leftarrow inom{i+j}{i}inom{e_v+e_{bef}}{e_v}g_{i}f_{u,j}' ]

    这个部分的复杂度是 (mathcal O(n^2)),预处理 (g_i) 的复杂度可以做到 (mathcal O(n^2)) 的,总体复杂度应该(mathcal O(n^3)) 才对吧。

    实现的不好就 (mathcal O(n^4)) 了,具体随便。


    u1s1 这个状态真的想不到啊 TAT

  • 相关阅读:
    利用条件变量实现生产者消费者模型
    加密算法
    brk mmap malloc使用
    c++中的RTTI机制
    std::array vector 数组联系和区别
    Intent基本使用
    [WPF]DataGrid C#添加右键弹出选择菜单
    c# 通过解析mp3规范命名并上传服务器
    自定义ComboBox,简简单单实现
    自定义窗体,简简单单实现
  • 原文地址:https://www.cnblogs.com/Soulist/p/13709134.html
Copyright © 2011-2022 走看看