2019.4.27.训练情况

本文总结了算法竞赛中的训练情况,详细介绍了使用最大流EK算法解决“ThePerfectStall”问题和运用dinic算法解决“MarchofthePenguins”问题的过程与技巧。通过二分匹配、bfs和dfs实现最大流,解决实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 个人训练情况
 Stat#Title
Solved8 / 14AThe Perfect Stall
Solved3 / 5BMarch of the Penguins
 1 / 1CPIGS
 0 / 4DSightseeing tour
  EBudget
 0 / 2FOptimal Milking
  GFiring
  HShoot the Bullet
  • 遇到的问题&解决方法

第一题“The Perfect Stall”二分匹配借用最大流EK算法解决:先设置源点和汇点,连接源点和所有牛,连接汇点和所有牛棚。再利用bfs寻找从源点到汇点的路径(增广路)要求每条边残余值>0,找出一条增广路后再在每条边正向上增加残余值的最小值,反向上减去残余值的最小值,sum加上残余值的最小值,完成一次增广。反复增广直到bfs找不到一条源点到汇点的路径时的sum就是答案。遇到的问题&解决方法

第二题“March of the Penguins”使用dinic算法:将每个点拆成入点(从1到n编号)和出点(从n+1到2n编号)两个点,权值为每个点的最大跳跃次数,建立源点(编号为0)并将源点与每个入点相连,权值为每个点上的企鹅数,尝试将每个点的出点与另一个点的入点相连(若两点间距离小于最大跳跃距离则相连),再分别把每个点(除源点外)的入点作为汇点,利用dinic算法求最大流:

1.利用bfs建立层次图,表示每个残余流量大于0的点到源点的最短距离(每条边距离为1).

2.利用dfs多路增广,flow=每次增广的值累加.

3.重复1和2直到bfs无法建立层次图时的flow即为最大流。

若flow与企鹅总数相等,则该汇点有效,依次遍历所有点找出所有可行的汇点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值