BZOJ-3876-支线剧情-Ahoi2014-上下界网络流

描述

【故事背景】
宅男JYY非常喜欢玩RPG游戏,比如仙剑,轩辕剑等等。不过JYY喜欢的并不是战斗场景,而是类似电视剧一般的充满恩怨情仇的剧情。这些游戏往往
都有很多的支线剧情,现在JYY想花费最少的时间看完所有的支线剧情。
【问题描述】
JYY现在所玩的RPG游戏中,一共有N个剧情点,由1到N编号,第i个剧情点可以根据JYY的不同的选择,而经过不同的支线剧情,前往Ki种不同的新的剧情点。当然如果为0,则说明i号剧情点是游戏的一个结局了。
JYY观看一个支线剧情需要一定的时间。JYY一开始处在1号剧情点,也就是游戏的开始。显然任何一个剧情点都是从1号剧情点可达的。此外,随着游戏的进行,剧情是不可逆的。所以游戏保证从任意剧情点出发,都不能再回到这个剧情点。由于JYY过度使用修改器,导致游戏的“存档”和“读档”功能损坏了,
所以JYY要想回到之前的剧情点,唯一的方法就是退出当前游戏,并开始新的游戏,也就是回到1号剧情点。JYY可以在任何时刻退出游戏并重新开始。不断开始新的游戏重复观看已经看过的剧情是很痛苦,JYY希望花费最少的时间,看完所有不同的支线剧情。


分析

  • 带有上下界的网络流
  • 题目中“游戏保证从任意剧情点出发,都不能再回到这个剧情点”的条件保证这是一个拓扑图即DAG.
  • 对于原图中的边x->y, 费用为cost, 这条边至少走一次, 而且每次时间都是相同的. 那么就可以起点->每个点(INF, 0), x->y(INF, cost), y->汇点(1, 0). 然后限制x->y的流量下限即可.
  • 关于有流量下限的网络流问题, 一种比较直观的理解方式是如果x->y的容量为cap, 而下限为low, 那么让cap-low作为新的容量. 但是这时x和y的流量就不守恒了, 直白点说就是x流到y的流量也是x的祖先流到x的, 那么直接把low剪掉后x的祖先就不会把流量low流到x了. 这时流量就不守恒了. y丢失了部分流量, x的流量盈余了.
    解决的方法是建立附加源和附加汇, 把这部分low的流量补给y再把x的流量low通过附加汇流走. 再在原汇和原源之间连容量为INF的边保持平衡. 把附加源和附加汇作为新的源汇跑最小费用最大流.

代码

https://code.csdn.net/snippets/623430

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值