zoukankan      html  css  js  c++  java
  • [HNOI2018]道路 --- 树形DP

    [HNOI2018]道路

    题目描述:

    W 国的交通呈一棵树的形状。W 国一共有 (n-1) 个城市和 (n) 个乡村,

    其中城市从 (1) 到 (n-1) 编号,乡村从 (1) 到 (n) 编号,且 (1) 号城市是首都。

    道路都是单向的,本题中我们只考虑从乡村通往首都的道路网络。

    对于每一个城市,恰有一条公路和一条铁路通向这座城市。

    对于城市(i), 通向该城市的道路(公路或铁路)的起点,要么是一个乡村,要么是一个编号比 (i) 大的城市。

    没有道路通向任何乡村。除了首都以外,从任何城市或乡村出发只有一条道路;

    首都没有往 外的道路。从任何乡村出发,沿着唯一往外的道路走,总可以到达首都。

    W 国的国王小 W 获得了一笔资金,他决定用这笔资金来改善交通。

    由于资金有限,小 W 只能翻修 (n-1) 条道路。

    小 W 决定对每个城市翻修恰好一条通向它的道路,即从公路和铁 路中选择一条并进行翻修。

    小 W 希望从乡村通向城市可以尽可能地便利,于是根据人口调 查的数据,

    小 W 对每个乡村制定了三个参数,编号为 (i) 的乡村的三个参数是 (a_{i} ; b_{i} ; c_{i} )

    假设 从编号为 (i) 的乡村走到首都一共需要经过 (x) 条未翻修的公路与 (y) 条未翻修的铁路,那么该乡村 的不便利值为

    (c_{i} * (a_{i} + x) * (b_{i} + y))

    在给定的翻修方案下,每个乡村的不便利值相加的和为该翻修方案的不便利值。

    翻修 (n-1) 条道路有很多方案,其中不便利值最小的方案称为最优翻修方案,

    小 W 自然 希望找到最优翻修方案,请你帮助他求出这个最优翻修方案的不便利值。

     

    输入格式: 

    第一行为正整数 (n)

    接下来 (n-1) 行,每行描述一个城市。其中第 (i) 行包含两个数 (s_{i};t_{i}) 。 

    (s_{i}) 表示通向第 (i) 座城市 的公路的起点, (t_{i}) 表示通向第(i)座城市的铁路的起点。

    如果 (s_{i} > 0) ,那么存在一条从第 (s_{i}) 座城 市通往第 (i) 座城市的公路,否则存在一条从第 (s_{i})个乡村通往第(i)座城市的公路;

     (t_{i}) 类似地,如 果 (t_{i}>0) ,那么存在一条从第 (t_{i}) 座城市通往第(i)座城市的铁路,否则存在一条从第 (t_{i}) 个乡村通 往第 (i) 座城市的铁路。

    接下来 (n) 行,每行描述一个乡村。

    其中第(i)行包含三个数 (a_{i};b_{i};c_{i}),其意义如题面所示。

     

    输出格式:

    输出一行一个整数,表示最优翻修方案的不便利值。

     

    改这题面真累。

    看起来就像个DP题。

    然后,可以发现是棵二叉树。。。

    先看数据估计状态,通过计算,发现(O(n*dep*dep))接近极限

    不妨设状态为(dp(i,j,k))

    表示对于(i)号节点而言,首都到它的路径存在(j)个公路和(k)个铁路的最小权值。

    不难想出:

    对于乡村而言,(dp(i,j,k)=a_{i}*(b_{i}+j)*(c_{i}+k))

    对于城市而言,(dp(i,j,k)=min(dp(ls,j+1,k)+dp(rs,j,k),dp(ls,j,k)+dp(rs,j,k+1)))

    每一层中暴力枚举(40*40)次即可。

    不用剪枝(反正复杂度过得去)

    但是,空间开不下,因此要维护一个表示当前链的栈

    注意到在DP中,每个状态只会被访问到一次,因此访问完(x),就可以回收(ls(x))和(rs(x))了

    时间复杂度:(O(3200*n))

    空间复杂度:(O(40^{3}*2))

    这题为什么难呢?

    因为它给人一种数论题的感觉。

    代码在此

  • 相关阅读:
    【转】VS2010中 C++创建DLL图解
    [转]error: 'retainCount' is unavailable: not available in automatic reference counting mode
    [转]关于NSAutoreleasePool' is unavailable: not available in automatic reference counting mode的解决方法
    【转】 Tomcat v7.0 Server at localhost was unable to start within 45
    【转】Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds. If
    【转】SVN管理多个项目版本库
    【转】eclipse安装SVN插件的两种方法
    【转】MYSQL启用日志,和查看日志
    【转】Repository has not been enabled to accept revision propchanges
    【转】SVN库的迁移
  • 原文地址:https://www.cnblogs.com/reverymoon/p/8894083.html
Copyright © 2011-2022 走看看