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

  • 相关阅读:
    java包和jar包
    java异常总结
    java异常练习2
    java中的异常处理机制_函数覆盖时的异常特点
    React(三)TableBar,ToDoList,Redux案例
    React(二)组件通信
    React(二)组件通信
    React(一)起步
    React(一)起步
    Vue(二)进阶
  • 原文地址:https://www.cnblogs.com/zcr-blog/p/14256081.html
Copyright © 2011-2022 走看看