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
驻军策略与树形DP

最低0.47元/天 解锁文章
2471

被折叠的 条评论
为什么被折叠?



