zoukankan      html  css  js  c++  java
  • [SHOI2015]聚变反应炉[树dp、贪心]

    题意

    给定一棵 (n) 个点的树,每个点有一个启动能量 (d) 和传递能量 (c) ,如果一个点被启动了,就会向和他直接相连的点发送 (c) 的能量,初始所有节点能量为0,问最少多少能量才能启动所有节点。

    分析

    • 定义状态 (f_i) 表示先激活父亲再激活 (i)(g_i) 表示先激活 (i) 再激活父亲。
    • 对于前50分,容易发现对于每个 (i) 来说, (f)(g) 的差值最多为1,因为 (f) 除了父亲的贡献,子树内的选择可以复制 (g)
      • 如果 (f_i = g_i) (父亲一定不传能量),那么一定选择 (g) ,这样还 (i) 还可以向父亲贡献;
      • 如果 (g_i-f_i=1) (父亲一定传能量),一定选择 (f) ,这样 (i) 和父亲之间稳定传输了1能量,反过来不一定。
    • 对于后50分,考虑对于所有 (i) 的子节点进行一个dp,定义 (h_i) 表示一共收到了来自儿子的 (i) 点能量的最小花费。复杂度 (O(n^2)​)

    代码

    代码链接

  • 相关阅读:
    Hibernate初学
    表分区
    单列函数
    Oracle基础
    8.28
    SpringMVC
    SpringMVC 初级操作
    试题评测
    Mybatis

  • 原文地址:https://www.cnblogs.com/yqgAKIOI/p/10386731.html
Copyright © 2011-2022 走看看