给你一颗有2n−1个节点的树,这一棵树的非叶节点均有两个儿子,左儿子与它连红边,右儿子与它连绿边,定义节点i的不便利值为
ci⋅(ai+x)⋅(bi+y)
其中x表示根节点到节点i的未加粗红边数量,y表示根节点到节点i的未加粗绿边数量。
求加粗边数量为n−1的所有叶节点的不便利值。
链接
题解
一道比较好的树形dp题。
将每一个城市标号1到n−1,乡村标号n到2n−1,设dp[i][j][k]表示标号后的i号节点到根节点要走过j条没有翻修的公路和k条没有翻修的铁路最小的不便利值。
设l[i]指的是通过公路连接i号结点的城市或乡村,r[i]指的是通过铁路连接i号结点的城市或乡村,那么
如果i是乡村,直接暴力算不便利值即可,即
dp[i][j][k]=ci⋅(ai+j)⋅(bi+k)
如果i是城市,因为最多翻修n−1条路,所以考虑对通向每一个城市的公路或铁路进行翻修。
翻修通往城市i的公路的不便利值是dp[li][j+1][k]+dp[ri[j][k](因为通向i的铁路没翻修),铁路同理,即
dp[i][j][k]=min
所以就得到了转移方程。
最后善意的提醒一句,本题卡空间,大佬们可以将dp的一维改成dfn,蒟蒻不会,只能暴力
代码
1 |
|
v1.5.2