(学军集训)APPLE buSinEss(buinss)

题意

给定一颗 n n n给节点的完全二叉树,每个节点有 a i a_i ai个苹果,有 m m m个果粉,每个果粉可以买从 u i u_i ui v i v_i vi的路径上的苹果(保证 u i u_i ui v i v_i vi的祖先),最多买 c i c_i ci个,每买一个付出 s i s_i si的钱,求最大收益。
数据范围: n , m ≤ 1 0 5 n,m\le 10^{5} n,m105

题解

直观的想法是建图跑费用流,但效率不行,考虑用贪心结合本题性质模拟费用流(orzslz)。

容易想到按照 s i s_i si从大到小考虑每一个果粉,在不使前面果粉买的苹果数减少的前提下,尽量多买。于是关键在于对于当前的果粉可选的点,可以把一些被前面的人选走的苹果改成选在最高点,即所谓“退流”。而对于每一个选过的苹果,我们关心的只是它可选的最高点,这样就需要记录每个点分别最高可退流到每层的苹果数 f [ i ] [ j ] f[i][j] f[i][j]

考虑对于一个果粉先从 v i v_i vi u i u_i ui选尽可能多的苹果,发现每选一个苹果就相当于把当前节点的 a − 1 a-1 a1(还可选的苹果数), a n s + d i ans+d_i ans+di,但这还要限制当前节点不能在 u i u_i ui的上面。于是需要记录在选取过程中可选的最高到每一层的苹果数s[i](初始状态即为 s [ d [ u [ i ] ] ] = c [ i ] s[d[u[i]]]=c[i] s[d[u[i]]]=c[i]),以及当前 s s s不为 0 0 0的最低层 d p dp dp
对于一个点 u u u,先在可选的苹果中从下往上选,当它选完后,考虑能否利用 u u u使当前状态更优。考虑其可退的流,能使状态更优当且仅当其能退到小于 d p dp dp的层(这里退流的意思即为把u上一些已选的能到达更高点的苹果换为可选的较低层的苹果),于是从最高层开始退,直到不能退为止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值