zoukankan      html  css  js  c++  java
  • CF1111E Tree 题解

    Codeforces
    Luogu

    Description.

    给定一棵树,每次选择 \(k\) 个点,问把这 \(k\) 个点分成不超过 \(m\) 个集合,满足

    • 不存在两个节点属于同一个集合,它们之间存在祖先后代关系。

    集合和集合之间本质不相同。
    \(\sum k\le 10^5,1\le m\le 300\)

    Solution.

    虚树,变成有 \(k\) 个标记点然后划分成 \(m\) 个集合。
    然后接下来大概率是一个 \(O(nm)\) 复杂度的 dp
    发现如果设状态为 当前到 \(x\) 分成了 \(k\) 个集合 很难转移。
    可以直接设为 当前到 \(x\) 分成 \(k\) 个不同集合,可以为空。
    于是就有 \(dp_{x,k}=\prod_{y\in\text{son}(x)}dp_{y,k}\),因为每次只能相对应的合并。
    如果当前这个点是标记点,则有 \(dp'_{x,k}=k\cdot dp_{x,k-1}\),是选择一个盒子放当前的根。

    然后再从这个考虑如何求答案,设分成 \(m\) 个集合答案是 \(f\)
    容斥后则有 \(f_k=\sum_{i=0}^k(-1)^i\dbinom{k}{i}dp_{k-i}\)

    Coding.

    大 shit 题,懒得写,咕咕咕

  • 相关阅读:
    好看的壁纸网站
    python简介
    python学习之基本语法(1)
    信息系统开发方法
    数据库连接池的使用小结
    软件版本后的字母含义
    信息系统与信息化
    软考
    实施过程中的项目管理
    mysql查SQL执行速度
  • 原文地址:https://www.cnblogs.com/pealfrog/p/15392748.html
Copyright © 2011-2022 走看看