WZOJ 1302 tree(贪心)

这道题目考察了一种树形结构上的优化问题,要求按照拓扑序依次删除节点,并最小化总代价。解决方案是首先将节点按权值从大到小排序,然后利用并查集合并权值相近的节点,以处理拓扑排序的限制。最终,通过计算不同块之间的删除代价,确定最优删除顺序。
摘要由CSDN通过智能技术生成

题意:
给你一棵树,每个点有一个权值 w[i] w [ i ] ,要求按拓扑序依次删除一个点,若一个点是第 k k 个被删除,则需付出 k w [ i ] 的代价,求删除所有点的最小总代价.
题解:
我们可以这样理解权值:把一个点延迟一个单位时间删除所需额外付出的代价,或是把一个点提前一个单位时间删除所减少的代价.
先不考虑拓扑序的限制,那么显然将所有点按权值从大到小排序再依次删除是最优方案.
再考虑拓扑排序的限制,依然将所有点按权值从大到小排序,由于有拓扑序的限制,权值最大的点只能放在它父亲后面第一个删除,那么可以把该点和它的父亲合并,父亲的权值要加上它的权值,可以用并查集维护这样的块.
那么这时每个块就多了一个点的数目 cnt c n t ,考虑序列中的 i,j i , j 两个块,它们的权值和点数分别为 w[a],cnt[a] w [ a ] , c n t [ a ] w[b],cnt[b] w [ b ] , c n t [ b ] .设总共有k个块, cost[a][b] c o s t [ a ] [ b ] 为删除序列中 a a b 的块的代价, s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值