[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)\)

 

这题为什么难呢?

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

 

代码在此

posted @ 2018-04-20 23:12  remoon  阅读(286)  评论(0编辑  收藏  举报