ЗАДАЧИ
problems.ru
О проекте | Об авторах | Справочник
Каталог по темам | по источникам |
К задаче N

Проект МЦНМО
при участии
школы 57
Задача 102898
Тема:    [ Потоки ]
Сложность: 4
Классы:
Название задачи: Поможем МПС .
В корзину
Прислать комментарий

Условие

В некоторой стране протянута сеть железных дорог. Требуется наладить сообщение между двумя различными городами A и B, пустив наибольшее возможное число поездов от A до B. Из-за конструктивных особенностей поездов, нарушений расписания и прочих объективных причин необходимо, чтобы никакие два поезда не проезжали через один город, за исключением,
конечно, городов A и B.

Входные данные

В первой строке входного файла записаны целое число M – количество городов в стране (2 ≤ M ≤ 25) и номера городов A и B (города нумеруются числами от 1 до M). Далее перечислены все железные дороги страны, каждая из них задается парой номеров городов, которые она соединяет. Все дороги считаются одноколейными и ориентированными, то есть ведущими из первого города пары во второй, но не наоборот.

Выходные данные

Выведите в первую строку выходного файла целое число K – максимальное количество поездов, которые можно пустить из A в B. Далее выведите K маршрутов поездов, по одному в каждой строке. Каждый маршрут задается номерами городов, через которые проходят поезда в порядке следования от A до B.

Пример входного файла

5 2 4
2 1
2 3
1 3
3 1
1 4
3 4
3 5

Пример выходного файла

2
2 1 4
2 3 4

Решение

Скачать архив тестов и решений

Построим ориентированный граф, соответствующий заданной сети железных дорог. Расщепим каждую из его вершин-городов, за исключением A и B, на две. Первая из них будет «пунктом въезда» в город, а вторая – «пунктом выезда». Говоря формально, каждая вершина v графа заменяется на две новых – v1 и v2, причем все ребра, входившие ранее в v, теперь будут входить в v1 , а все ребра, исходившие ранее из v, будут исходить из v2 , кроме того, добавляется ребро (v1, v2). В результате этой операции мы свели условие непересечения маршрутов поездов по вершинам к условию их непересечения по ребрам. Теперь выбираем города A и B в качестве источника и стока, а пропускные способности всех ребер полагаем равными единице. В получившейся сети ищем максимальный поток, его величина и есть искомое число K (докажите это и придумайте, как по максимальному потоку построить маршруты поездов).

Замечание

Идея задачи взята из книги [Кормен 99]. Там же, в главе 27, можно найти очень хорошее изложение алгоритмов поиска максимального потока в сети.

Источники и прецеденты использования

книга
предмет информатика
Автор Беров В., Лапунов А., Матюхин В., Пономарев А.
Название Особенности национальных задач по информатике
Издательство Триада-С
Год издания 2000
глава
Номер 3
Название Алгоритмы на графах
Задача
Номер 15

© 2004-... МЦНМО (о копирайте)
Пишите нам

Проект осуществляется при поддержке Департамента образования г.Москвы и ФЦП "Кадры" .