【JZOJ5966】【NOIP2018】保卫王国

驻军策略与树形DP

description

Z国有n座城市,n-1条双向道路,每条双向道路连接两座城市,且任意两座城市都能通过若干条道路相互到达。
Z国的国防部长小Z要在城市中驻扎军队。驻扎军队需要满足如下几个条件:
①一座城市可以驻扎一支军队,也可以不驻扎军队。
②由道路直接连接的两座城市中至少要有一座城市驻扎军队。
③在城市里驻扎军队会产生花费,在编号为i的城市中驻扎军队的花费是pi。
小Z很快就规划出了一种驻扎军队的方案,使总花费最小。但是国王又给小Z提出了m个要求,每个要求规定了其中两座城市是否驻扎军队。小Z需要针对每个要求逐一给出回答。具体而言,如果国王提出的第j个要求能够满足上述驻扎条件(不需要考虑第j个要求之外的其它要求),则需要给出在此要求前提下驻扎军队的最小开销。如果国王提出的第j个要求无法满足,则需要输出-1(1<=j<=m) 。现在请你来帮助小Z。


analysis

  • 正解倍增+矩乘+树形DP

  • 考虑一下44pts44pts44pts的树形DPDPDP,设f[i][0/1]f[i][0/1]f[i][0/1]表示以iii为根的子树中,iii选或不选的最优解,则
    f[i][0]=∑f[son][1]f[i][0]=\sum f[son][1]f[i][0]=f[son][1]f[i][1]=∑min(f[son][0],f[son][1])f[i][1]=\sum min(f[son][0],f[son][1])f[i][1]=min(f[son][0],f[son][1])

  • 每次把某个fff赋值为∞∞,暴力重新DPDPDP,就可以得到44pts44pts44pts的好成绩

  • 接着考虑另一个DPDPDP,设g[i][0/1]g[i][0/1]g[i][0/1]表示以iii为根的子树iii选或不选的最优解

  • 由于我们已经DPDPDP出了fff数组,我们也可以从一个点的父亲来转移ggg,则
    g[i][0]=f[i][0]+g[fa][1]−min(f[i][0],f[i][1])g[i][0]=f[i][0]+g[fa][1]-min(f[i][0],f[i][1])g[i][0]=f[i][0]+g[fa][1]min(f[i][0],f[i][1])g[i][1]=f[i][1]+min(g[fa][0]−f[i][1],g[fa][1]−min(f[i][0],f[i][1]))g[i][1]=f[i][1]+min(g[fa][0]-f[i][1],g[fa][1]-min(f[i][0],f[i][1]))g[i][1]=f[i][1]+min(g[fa][0]f[i][1],g[fa][1]min(f[i][0],f[i][1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值