K. Разваливающийся граф
Удалите из графа одну вершину вместе с её рёбрами так, чтобы количество компонент связности стало наибольшим. Выведите это количество.
Перебирать вершины и каждый раз запускать обход — , а это при и уже четыре миллиарда операций. Считается за один обход, той же функцией подъёма, что и точки сочленения.
Пусть в графе компонент, и мы удаляем вершину из своей компоненты. Тогда остальные компонент никуда не денутся, а компонента вершины распадётся на
- число сыновей в дереве обхода, если — корень обхода;
- число сыновей с , плюс один за оставшуюся часть, если — не корень.
Ответ — максимум по всем вершинам от плюс это число. Заметьте, что удаление вершины может число компонент и уменьшить: изолированная вершина сама была компонентой.
Формат ввода
Первая строка содержит числа () и ().
Далее идут строк с рёбрами. Граф не обязан быть связным; возможны кратные рёбра и петли.
Формат вывода
Одно число — наибольшее возможное количество компонент связности после удаления одной вершины.
Примеры
3 2 1 2 2 3
2
1 0
0