- 个人训练情况
| Stat | # | Title | |
|---|---|---|---|
| Solved | 8 / 14 | A | The Perfect Stall |
| Solved | 3 / 5 | B | March of the Penguins |
| 1 / 1 | C | PIGS | |
| 0 / 4 | D | Sightseeing tour | |
| E | Budget | ||
| 0 / 2 | F | Optimal Milking | |
| G | Firing | ||
| H | Shoot 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与企鹅总数相等,则该汇点有效,依次遍历所有点找出所有可行的汇点。
本文总结了算法竞赛中的训练情况,详细介绍了使用最大流EK算法解决“ThePerfectStall”问题和运用dinic算法解决“MarchofthePenguins”问题的过程与技巧。通过二分匹配、bfs和dfs实现最大流,解决实际问题。
222

被折叠的 条评论
为什么被折叠?



