zoukankan      html  css  js  c++  java
  • [HAOI2015]树上染色(树形dp)

    一道状态定义比较不寻常的树形dp。

    因为这道题求的路径和,那么这里用到一个套路:对于每一条边分别计算贡献。这样子我们就可以把边看做点,记 (f_{i,j}) 代表以 (i) 为根的子树,共有 (j) 个黑点,子树内的边对全局的贡献。转移可采用常规的树形dp,关键是权值怎么计算?考虑一条边 (u ightarrow v) 的权值为 (val(u,v)),那么我们枚举 (v) 中的黑点个数,记为 (x),统计经过这条边的黑 ( ightarrow) 黑和白 ( ightarrow) 白的路径条数,分别为 (x imes (m-x))((siz[v]-x) imes(n-siz[v]-m+x))。接下来关键的一步是计算时间复杂度,如果每一层都直接 (k^2) 枚举显然是不对的,我们在每一次枚举时只枚举到 (siz),因为黑点数不可能超过总点数,可是这样还是可能被一条链卡常 (k^2)。我们考虑每次把一个新的子树挂到当前根上,这时我们不枚举非法状态(之前没有答案的状态),复杂度就对了。

    更具体的证明:

    这样子分复杂度均摊下来其实是路径条数,也就是 $O(n^2)$

    code

  • 相关阅读:
    poj 1743 Musical Theme 后缀数组
    poj 1743 Musical Theme 后缀数组
    cf 432D Prefixes and Suffixes kmp
    cf 432D Prefixes and Suffixes kmp
    hdu Data Structure? 线段树
    关于position和anchorPoint之间的关系
    ios POST 信息
    CALayers的代码示例
    CALayers详解
    ios中得sqlite使用基础
  • 原文地址:https://www.cnblogs.com/zcr-blog/p/14256081.html
Copyright © 2011-2022 走看看