Roads of Potokolandiya#189

Roads of Potokolandiya (Editorial)

Дороги задані правилом i \leftrightarrow 2i \pmod n (де замість береться ). Виявляється, відповідь залежить лише від того, чи є степенем двійки.

Розберемося чому. Позначимо через непарну частину числа , тобто n = 2^s \cdot m, де непарне.

Подивимось на компоненту зв'язності міста . Ребро веде в з такого , що 2i \equiv n, а це дає i = n/2 (якщо парне) або i = n. Тому з ми спускаємось у , далі в і так аж до . А з ребра ведуть у , , Неважко переконатися, що вся компонента міста складається виключно з кратних до .

Якщо не є степенем двійки, то m > 1, і місто не кратне , тобто лежить в іншій компоненті. Отже, граф незв'язний, і парою міст без шляху можна впевнено назвати та .

Якщо ж n = 2^s, то m = 1, компонента міста містить кратні одиниці, тобто всі міста, — граф зв'язний.

Перевірка «чи є степенем двійки» робиться одним бітовим трюком: n \mathbin{\&} (n-1) = 0. Отже, весь розв'язок — одна умова, без жодного обходу графа, що важливо при n \le 10^6.

Не забудьте про n = 1: це степінь двійки, місто одне, відповідь YES.