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

Проект МЦНМО
при участии
школы 57
Задача 66597
Темы:    [ Деревья ]
[ Обход графов ]
[ Теория алгоритмов (прочее) ]
Сложность: 4
Классы: 10,11
В корзину
Прислать комментарий

Условие

В некоторой стране есть 100 городов, которые связаны такой сетью дорог, что из любого города в любой другой можно проехать только одним способом без разворотов. Схема сети дорог известна, развилки и перекрестки сети необязательно являются городами, всякая тупиковая ветвь сети обязательно заканчивается городом. Навигатор может измерить длину пути по этой сети между любыми двумя городами. Можно ли за 100 таких измерений гарантированно определить длину всей сети дорог?

Решение

Представим описанную в условии сеть дорог в виде графа, вершинами которого являются города, развилки и перекрестки, а ребрами – дороги. Покажем, что этот граф является деревом, то есть связным графом без циклов. Связность следует из того, что из любого города можно проехать в любой другой, а любая развилка или перекресток должны быть соединены с каким-либо городом. Допустим, что в нашем графе есть цикл. Он не содержит двух и более вершин-городов, так как в этом случае, двигаясь в противоположных направлениях по циклу, мы могли бы получить два различных пути из одного города в другой. Далее, пусть между некоторыми городами $A$ и $B$ существует путь, содержащий какую-то вершину цикла. Он обязательно найдется, так как иначе эта вершина не могла бы быть в нашей сети. Но тогда, добавляя к этому пути «кольцо» вдоль цикла, мы получим еще один путь между $A$ и $B$. Значит, циклов в нашем графе быть не может и это действительно дерево.

По условию задачи все концевые вершины дерева – города. Назовем эти города концевыми. Назовем также концевой город $B$ следующим за концевым городом $A$, если по пути из $A$ в $B$ на каждой развилке выбирается самая правая дорога. Выберем какой-нибудь концевой город $A_1$ и измерим расстояние между ним и следующим за ним концевым городом $A_2$. Потом измерим расстояние между $A_2$ и следующим за ним концевым городом $A_3$ и так далее. После не более чем 100 таких измерений мы вернемся в исходный город $A_1$.

Покажем, что при этом каждая дорога нашей сети будет пройдена ровно два раза в противоположных направлениях. Рассмотрим произвольную дорогу. При удалении из дерева любого ребра оно распадается на две компоненты связности $K_1$ и $K_2$, причем каждая из них содержит города. Пусть изначально мы находились в $K_1$. Поскольку необходимо обойти все города сети, мы должны пройти по этой дороге два раза: первый раз – когда движемся из $K_1$ в $K_2$, а второй – когда возвращаемся обратно. Процедура обхода устроена таким образом, что мы посетим все вершины компоненты $K_2$ до того, как покинем ее, поэтому больше проходить по дороге из $K_1$ в $K_2$ не потребуется.

Наконец, сложив измеренные величины и разделив сумму пополам, мы получим длину всей сети.

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

олимпиада
Название Московская математическая олимпиада
год
Номер 84
Год 2021
класс
Класс 11
задача
Номер 4

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

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