[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)\)
这题为什么难呢?
因为它给人一种数论题的感觉。