首页 > 其他 > 详细

[BZOJ3875][AHOI2014]骑士游戏(松弛操作)

时间:2015-02-16 23:28:27      阅读:737      评论:0      收藏:0      [点我收藏+]

题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3875

分析:

类似于spfa求最短路,设d[i]表示完全消灭i号怪物的最小花费,我们对d[]进行动态更新

我们可以把问题反向:一开始所有怪物都存活,我们要找到一个怪物合成方案合成1号怪物,其中合成方法有两种,一种是魔法攻击逆向产生怪物,另一种就是由某个怪物的后继怪物合成此怪物

对于第一种产生方法的表示,令初始的d[i]=k[i]即可

对于第二种产生方法的表示,也就是算法的核心——类似于spfa的“松弛”

但这里松弛操作的条件不太一样,这里松弛操作的条件是d[i]>s[i]+∑d[j] (j是i的后继)

于是算法就出来了:

1、将1~n号怪物加入队列,初始d[i]=k[i](表示用魔法攻击逆向产生)

2、依次访问队列中的每个节点i,如果d[i]>s[i]+∑d[j]则进行松弛操作更新d[i],并且把节点i的所有前继(注意不是后继)加入队列进行下一轮的更新(如果前继已经在队列中存在就不加入)

3、ans=d[1]

[BZOJ3875][AHOI2014]骑士游戏(松弛操作)

原文:http://www.cnblogs.com/wmrv587/p/4294610.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!