QAQ

P2805 [NOI2009] 植物大战僵尸

已经改了标签
by kkksc03 @ 2016-07-20 21:12:41


算法思想概述 本题是一道最大权闭合子图模型,应用的算法为最大流(BFS增广即可),定理为最大流最小割定理,辅助算法为拓扑排序。 问题初始建模 首先我们我建立图论模型,把每个植物当做一个顶点,植物携带的资源数目为顶点的权值。如果一个植物b在另一个植物a的攻击范围内,连接一条有向边<a,b>,表示a可以保护b。由于僵尸从右向左进攻,可以认为每个植物都被它右边相邻的植物保护,对于每个植物a(除最左边一列),向其左边的相邻植物b,连接一条有向边<a,b>。 由本题样例就可以发现,有一些植物是相互依赖的,于是我们可以进行算法实现的第一步: 1.使用拓扑排序去除图中的环,从而使图得到简化。 最大权闭合子图 进行算法的第二步。 2.对第一步中得到的图进行转置操作(把所有边反向),从而得到最大子权闭合图。 样例的图经过拓扑排序和转置操作后如下: 其中最大权闭合子图为(1,2,4) 下面进行算法实现的第3、4步: 3.最大权闭合子图的网络流建模: (1). 建立附加源S和附加汇T。 (2). 图中原有的转置后的边容量设为∞。 (3). 从S向每个权值为正的点连接一条容量为该点权值的有向边。 (4). 从每个权值不为正的点向T连接一条容量为该点权值绝对值的有向边。 建模后图如下: 4.求解:求S到T的最大流Maxflow,最大权闭合子图的权值就是(所有正权点权值之和 – Maxflow),也就是需要输出的答案。
by Freddie @ 2019-07-08 19:38:58


|