码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-02-16 23:31:45      阅读:389      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!