Примеры сведения к задачам поиска потока — различия между версиями
Sultazat (обсуждение | вклад) м (→Монстр и лабиринт) |
Sultazat (обсуждение | вклад) м (→См.также) |
||
Строка 31: | Строка 31: | ||
== См.также == | == См.также == | ||
+ | * [[Схема_алгоритма_Диница]] |
Версия 21:26, 25 декабря 2016
Монстр и лабиринт
Задача: |
Дано поле размером | , некоторые клетки поля закрашены. В одной из незакрашенных клеток поля стоит монстр, он умеет ходить только по незакрашенным клеткам (из текущей клетки он может пойти только в ту клетку, с которой имеет общую сторону). Какое минимальное количество клеток нужно закрасить, чтобы монстр не смог выбраться за пределы поля?
Сразу скажем, что выбраться за пределы поля эквивалентно тому, что монстр может дойти до какой-либо крайней клетки.
Покажем то, что минимальное количество клеток, которое нужно закрасить, равно максимальному количеству клеточно-непересекающихся путей из позиции монстра до крайних клеток поля. Очевидно, что ответ не больше, чем количество всех путей от монстра до крайних клеток. Сделаем ещё более строгое неравенство: ответ не больше, чем максимальное количество клеточно-непересекающихся путей, т.к. если взять какие-нибудь 2 пересекающихся пути и закрасить клетку в позиции, где они пересекаются, то блокируется выход за пределы поля сразу по 2 этим путям. С другой стороны, если закрасить клетку на каком-то из путей, то блокируется только этот путь, т.к. были взяты клеточно-непересекающиеся пути. Значит, ответ не меньше, чем количество таких путей. В итоге получаем то, что и хотели доказать.
Рассмотрим сеть, в которой вершинам будут соответствовать незакрашенные клетки поля, соседние незакрашенные клетки соединим ориентированными рёбрами с пропускной способностью 1. В качестве истока возьмём вершину, которой соответствует клетка монстра. Добавим в граф ещё одну вершину — сток, добавим рёбра из вершин, соответствующим крайним клеткам поля, в сток с пропускной способностью 1. Чтобы пути не пересекались по клеткам, раздвоим каждую вершину графа на 2 вершины: в одну будут только входить рёбра, из другой — только выходить рёбра, и сами эти вершины соединим ребром с пропускной способностью 1.
Используя алгоритм Форда-Фалкерсона, найдём максимальный поток в сети. Согласно теореме о декомпозиции, нахождение максимального потока эквивалентно тому, что мы нашли максимальное количество путей из истока в сток. Т.е. требуемый ответ на задачу равен максимальному потоку.
Время работы алгоритма Форда-Фалкерсона
. Первое замечание: (это следует из того, что из каждой вершины исходит не более 4 рёбер), т.е. . Второе замечание: ответ не превосходит 4, т.к. можно закрасить клетку слева, справа, сверху и снизу от позиции монстра и он не сможет никуда двигаться, поэтому можно считать константой. Итоговое время работы .