Задача №114739. Разработка тарифов
Мэр города М. решил в 2020 году запустить несколько новых веток метро. Поскольку бюджет города сильно ограничен, он принял решение не копать новые туннели, а воспользоваться уже существующей подземной сетью.
Туннельная система города М. состоит из \(n\) станций метро. Станции соединены между собой двунаправленными туннелями, которых всего \(n - 1\). Между любыми станциями \(v\) и \(u\) есть ровно один простой путь. Каждая ветка метро, которую хочет создать мэр, является простым путём от станции \(a_i\) до станции \(b_i\). Ветки могут пересекаться, то есть иметь общие станции или туннели. Однако, ещё не решено, в какую из двух сторон будут следовать поезда на каждой из веток. А именно, на пути между станциями \(a_i\) и \(b_i\) поезда будут следовать либо от станции \(a_i\) к станции \(b_i\), либо от станции \(b_i\) к станции \(a_i\), но только в одну из сторон.
В городе \(M\) действует особая система тарифов. Каждой станции присваивается целое положительное число \(c_i\) — тарифная зона станции, а стоимость переезда от станции \(v\) до станции \(u\) определяется как \(c_u - c_v\) бурлей. Разумеется, такой переезд разрешен, только если есть ветка метро, по которой поезда идут из \(v\) в \(u\). Мэр города не хочет, чтобы между какими-то двумя станциями на одной ветке стоимость проезда была отрицательной, поэтому было принято решение выбрать направления движения поездов по веткам и изменить тарифные зоны всех станций города таким образом, чтобы на каждой ветке тарифные зоны станций строго возрастали, если рассмотреть её в сторону движения поездов.
Мэр сначала хочет присвоить каждой станции тарифную зону, а потом выбрать направления всех веток метро, чтобы вдоль каждой ветки тарифные зоны строго возрастали. В связи со скорым наступлением дня города, из всех возможных вариантов назначения тарифных зон мэр хочет выбрать то, где максимальное \(c_i\) будет как можно меньше. Помогите мэру составить новое распределение, или скажите, что это невозможно. Обратите внимание, от вас требуется только назначить тарифные зоны оптимальным образом, а направления для веток выводить не требуется. Таким образом, ваше решение считается верным, если существует способ выбрать направление следования поездов на каждой ветке так, чтобы вдоль всех веток тарифные зоны строго возрастали.
Обратите внимание, что в некоторых группах тестов минимизировать ответ не нужно, а требуется лишь определить, возможно ли назначить тарифные зоны нужным образом.
Первая строка содержит целое число \(n,\,m,\,t\) (\(2 \le n, \le 500\,000,\ 1 \le m \le 500\,000,\ 0 \le t \le 1\)) — количество станций в городе, количество веток метро, а также параметр теста \(t\). Если \(t = 0\), то минимизировать ответ не обязательно. Если \(t = 1\), то от вас требуется минимизировать номер тарифной зоны самой дорогой станции.
Каждая из следующих \(n-1\) строк описывает очередной туннель метро. Каждый туннель задаётся целыми числами \(v_i\), \(u_i\) (\(1 \le v_i,\ u_i \le n\), \(v_i \ne u_i\)). Гарантируется, что между любыми двумя станциями есть ровно один простой путь.
Каждая из следующих \(m\) строк описывает очередную ветку метро. Каждая ветка задаётся целыми числами \(a_i\), \(b_i\) (\(1 \le a_i,\ b_i \le n\), \(a_i \neq b_i\)).
В первой строке выведите целое число \(k\) — максимальный номер тарифной зоны Если параметр теста \(t\) равен \(0\), то от вас не требуется минимизировать \(k\). Если \(t = 1\), то \(k\) должно быть минимально возможным.
В следующей строке выведите числа \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le k\)) — тарифные зоны станций.
Если существует несколько ответов, выведите любой из них. Если же не существует ни одного способа назначить тарифные зоны, выведите « -1 ».
В первом примере ветка \(1 \rightarrow 3\) проходит по станциям в порядке 1, 2, 3. При таком порядке посещения станций их тарифные зоны возрастают. Поскольку на этой ветке 3 станции, то нам потребуется как минимум 3 тарифные зоны. Таким образом, ответ 1, 2, 3 оптимален.
Во втором примере ни одно распределение тарифных зон не согласуется с ветками метро.
Тесты к этой задаче состоят из десяти групп. Баллы за каждую группу ставятся только при прохождении всех тестов группы и всех тестов необходимых групп. Offline-проверка означает, что результаты тестирования вашего решения на данной группе станут доступны только после окончания соревнования.
В группах 4 и 5 не существует туннеля, принадлежащего двум веткам метро. Длиной ветки назовем количество туннелей, которые ей принадлежат.
Дополнительные ограничения | |||||
Группа | Баллы | \(n\), \(m\) | \(t\) | Необх. группы | Комментарий |
0 | 0 | – | – | – | Тесты из условия. |
1 | 6 | \(n,\ m \leq 8\) | – | 0 | |
2 | 10 | \(n,\ m \leq 15\) | – | 0, 1 | |
3 | 15 | \(n,\ m \leq 100\) | – | 0, 1, 2 | |
4 | 11 | \(n,\ m \leq 100\,000\) | – | – | Нет общих туннелей. |
5 | 10 | – | – | 4 | Нет общих туннелей. |
6 | 8 | – | – | – | У всех туннелей есть общий конец. |
7 | 10 | \(n,\ m \leq 100\,000\) | \(t = 0\) | – | Суммарная длина веток до \(100\,000\). |
8 | 6 | – | \(t = 0\) | 7 | |
9 | 14 | \(n,\ m \leq 100\,000\) | – | 0, 1, 2, 3, 4, 7 | |
10 | 10 | – | – | 0 – 9 | Offline-проверка. |
3 1 1 1 2 2 3 1 3
3 1 2 3
4 3 0 1 2 1 3 1 4 2 3 2 4 3 4
-1