Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела игры
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#76070

Дан граф-дерево, состоящий хотя бы из 3  вершин. В некоторой вершине V  стоит невидимая фишка. За ход мы выбираем любой набор     N  вершин графа. Нам сообщают количество вершин набора N,  в которые можно добраться из V  не более, чем за 1  ход. Затем фишка передвигается по ребру в одну из соседних вершин. Можно ли через некоторое время точно сказать, где была фишка до последнего перемещения?

Подсказки к задаче

Подсказка 1

Как определять положение вершины для дерева из двух вершин?

Подсказка 2

Теперь мы хотим обобщить алгоритм на произвольное количество вершин. Давайте подвесим граф за вершину и каждый раз будет добавлять в проверяемое множество новую вершину, начиная от корня, которая является смежной с последней добавленной вершиной. Как действовать, если у новой добавленной вершиной ровно одна несмежная вершина, которая еще не включена в проверяемое множество?

Подсказка 3

Заметим, что так как до этого множество, про которое мы спрашиваем, с фишкой не соседствовало, то мы можем услышать только 1 или 2, причем если мы услышали 1, то фишка находилась в соседней с новой добавленной вершине и мы ее определяем, а если 2, то в самой добавленной вершине, что мы также определим. Осталось понять, как действовать в случае, если смежных к последней добавленной вершине больше 2.

Подсказка 4

В таком случае необходимо определять в каком из поддеревьев относительно последней добавленной вершины находится фишка. Как это сделать?

Подсказка 5

Достаточно в качестве проверяемого множества последовательно брать каждое из поддеревьев последней добавленной вершиной (возможно, с последней добавленной в основное множество вершиной).

Показать ответ и решение

Будем действовать по следующему алгоритму, попутно объясняя, почему он сработает. Рассмотрим висячую вершину X  дерева и подвесим граф за нее. Сначала назовем только вершину X.

1  ) Если нам ответили не 0. Тогда нам могли ответить только 1.  Обозначим смежную с X  вершину через Y  и спросим про X  и    Y.  Если нам отвечают не 2,  то это означает, что фишка стоит не в X,  этот случай будет подходить под рассматриваемые далее. Если нам все-таки отвечают 2,  то спросим про X,Y  и все вершины, смежные с Y.  Причем спросим про это множество дважды. Заметим, что если хоть раз мы услышим ответ 3  или больше, то сможем определить положение фишки. Если же 3  нам не ответят, то это означает, что сейчас, после нашего вопроса, фишка находится ни в X,  ни в Y.  Этот случай будет подходить под рассматриваемые далее, потому что это то же самое, что спросить только про X  и услышать ответ 0.

2  ) Итак, можно считать, что мы услышали ответ 0.  Это означает, что ни в X,  ни рядом с X  фишка на предыдущем ходу не стояла. Мы будем увеличивать множество вершин, про которые задается вопрос на очередном шаге, добавляя следующую вершину, смежную с последней из добавленных. При этом есть две возможности, при которых мы начинаем действовать по-другому.

Назовем разветвлением вершину, степень которой больше 3.

a) Последняя добавленная к множеству вершина Z  не является разветвлением, но при этом мы услышали в ответ не 0.  Заметим, что так как до этого множество, про которое мы спрашиваем, с фишкой не соседствовало, то мы можем услышать только 1  или 2,  причем если мы услышали 1,  то фишка находилась в соседней с Z  вершине и мы ее определяем, а если 2,  то в самой вершине Z,  что мы также определим. Этот подслучай разобран.

б) Последняя добавленная к множеству вершина Z  является разветвлением. Если при этом нам ответили 2  (а больше ответить нам и не могли), то фишка находилась в вершине Z.  Если нам ответили 1,  то спросим про то же самое множество вершин (обозначим его через A  ) еще раз. Если нам отвечают не 0,  то мы можем однозначно определить положение фишки. Итак, мы добились, чтобы нам ответили 0.  Получается, что фишка находится на одной из ветвей, выходящих из вершины Z.

Будем проверять эти ветви по очереди. Сначала спросим про всю первую ветку (без Z  ). Пусть мы услышали ответ 0.  Тогда повторим вопрос про множество A,  пока не услышим 0  (как мы выяснили ранее, либо за 2  вопроса мы этого добьемся, либо выясним местоположение фишки). Затем проверим следующую ветку, и так далее, пока не найдем ветку, в которой находится фишка. Вновь проверим множество A,  пока не услышим 0  в ответ. За все наши вопросы фишка не может переходить с ветки на ветку, значит, мы точно знаем, на какой ветке сейчас фишка. Все остальные ветви отбрасываем и добавляем к множеству A  фишек, про которые мы сейчас будем спрашивать, первую фишку нужно ветви. Далее действуем по тому же алгоритму. Заметим, что рано или поздно он закончится, так как на отбрасываемых ветках фишка оказаться не может. Значит, в итоге мы найдем фишку.

Ответ:

Да, можно

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение

Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!