Олимпиадный тренинг

Задача . G. Приватизация дорог в Древляндии


Древляндия состоит из \(n\) городов и \(n-1\) дороги. Все дороги являются двусторонними и соединяют пару различных городов. Из любого города по дорогам можно добраться до любого другого. Всё верно, топология страны — это именно неориентированное дерево.

В Древляндии есть несколько частных дорожных компаний. Правительство решило передать дороги в собственность компаний. После приватизации каждая дорога будет принадлежать какой-то одной компании, одна компания может владеть несколькими дорогами.

Правительство обеспокоено возможными обвинениями в пристрастности. В правительстве полагают, что люди города могут посчитать несправедливой ситуацию, если две или более дороги, входящие в этот город, принадлежат одной компании. Правительство планирует такую приватизацию, что количество таких городов не будет превосходить \(k\), а количество частных компаний (которые участвуют в приватизации) — минимально.

Выберите такое минимальное количество компаний \(r\), что возможно распределить все дороги по этим компаниям так, что количество городов с двумя или более дорогами одной компании не превосходит \(k\). Другими словами, назовём город хорошим, если все его дороги принадлежат различным компаниям. Ваша задача найти минимальное \(r\), что существует распределение всех дорог по компаниям от \(1\) до \(r\), что количество не являющимися хорошими городов не превосходит \(k\).

Картинка иллюстрирует первый пример (\(n=6, k=2\)). Ответ на этот тест содержит \(r=2\) компании. Числа на рёбрах соответствуют номерам дорог. Цвета рёбер соответствуют компаниям: красный цвет обозначает первую компанию, синий цвет обозначает вторую компанию. Серая вершина (с номером \(3\)) соответвует городу, который не является хорошим. Количество таких вершин (в данном случае, только одна) не превосходит \(k=2\). Невозможно получить не более \(k=2\) таких вершин, если ответ содержит только одну компанию.
Входные данные

В первой строке записаны два целых числа \(n\) и \(k\) (\(2 \le n \le 200000, 0 \le k \le n - 1\)) — количество городов и максимальное возможное количество городов с двумя или более дорогами одной компании.

Следующие \(n-1\) строк содержат описания дорог, по одному описанию в строке. Каждая строка содержит пару целых чисел \(x_i\), \(y_i\) (\(1 \le x_i, y_i \le n\)), где \(x_i\), \(y_i\) — номера городов, которые соединены \(i\)-й дорогой.

Выходные данные

В первую строку выведите искомое число \(r\) (\(1 \le r \le n - 1\)). Во вторую строку выведите \(n-1\) целое число \(c_1, c_2, \dots, c_{n-1}\) (\(1 \le c_i \le r\)), где \(c_i\) — это номер компании, которая должна владеть \(i\)-й дорогой. Если ответов несколько, то выведите любой из них.


Примеры
Входные данныеВыходные данные
1 6 2
1 4
4 3
3 5
3 6
5 2
2
1 2 1 1 2
2 4 2
3 1
1 4
1 2
1
1 1 1
3 10 2
10 3
1 2
1 3
1 4
2 5
2 6
2 7
3 8
3 9
3
1 1 2 3 2 3 1 3 1

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя