Задача №1237. Перегоны
Разбор добавил Михаил Пядеркин
Рассмотрим граф, в котором вершинами будут станции, а ребра - известные расстояния. Причем, если нам известно расстояние a[i][j], то нам известно и расстояние a[j][i]=-a[i][j]. Тогда этот граф должен быть связен (иначе у нас какие-то две станции могут находиться на произвольном расстоянии друг от друга, при этом никаких противоречий не будет (последний тест из условия)). Теперь мысленно расположим наши станции на числовой оси, город 1 имеет координату 0, и попытаемся найти координаты всех остальных городов (отсюда мы, очевидно, найдем расстояния). Обозначим за d[v] координату вершины v. Запустим из вершины 1 поиск в глубину (или в ширину, что это такое - смотри теоретический материал про графы). При рассмотрении очередного ребра (u, v): - если расстояние до вершины v неизвестно, то присвоить d[v]=d[u]+a[u][v] и запустить поиск из вершины u - если же расстояние до вершины v известно, то проверить равенство d[v]=d[u]+a[u][v]. Если оно не выполнилось, то вывести 2 (т.к. информация противоречива) и завершить выполнение программы. В конце мы, наконец, получим координаты всех вершин. Теперь осталось проверить, что они расположены по возрастанию (иначе вывести 2, смотри предпоследний пример из условия).
Сдать: для сдачи задач необходимо войти в систему
11
statement