Автор задачі: | De3b0o |
Підготовлено: | De3b0o |
Відредаговано: | Hasan Saleh (MathModel) |
Розв’язок
Спостереження:
Клітини, з'єднані без проходження через перешкоди, утворюють компоненти зв’язності. Якщо початок і ціль у тій самій компоненті, телепортація не потрібна.
Ніколи не вигідно використовувати більше ніж один телепорт.
Алгоритм:
Позначити всі компоненти зв’язності за допомогою DFS/BFS.
Запам’ятати, які компоненти містять телепорти.
Запустити BFS одночасно з усіх телепортів, щоб обчислити мінімальну відстань до найближчого телепорта.
Для кожного запиту (x,y,b,c):
Якщо і у тій самій компоненті, відповідь .
Інакше, якщо обидві клітини належать компонентам із телепортом, відповідь .
Інакше, досягти неможливо, відповідь .
Загальна складність: \mathcal{O}(n \cdot m + q).