EduBrick

K. Разваливающийся граф

3000 мс · 256 МБ · всё или ничего

Удалите из графа одну вершину вместе с её рёбрами так, чтобы количество компонент связности стало наибольшим. Выведите это количество.

Перебирать вершины и каждый раз запускать обход — O(n(n+m))O(n(n+m)), а это при n=2⋅104n = 2 \cdot 10^4 и m=2⋅105m = 2 \cdot 10^5 уже четыре миллиарда операций. Считается за один обход, той же функцией подъёма, что и точки сочленения.

Пусть в графе cc компонент, и мы удаляем вершину vv из своей компоненты. Тогда остальные c−1c - 1 компонент никуда не денутся, а компонента вершины vv распадётся на

  • число сыновей vv в дереве обхода, если vv — корень обхода;
  • число сыновей uu с low[u]≥tin[v]low[u] \ge tin[v], плюс один за оставшуюся часть, если vv — не корень.

Ответ — максимум по всем вершинам от c−1c - 1 плюс это число. Заметьте, что удаление вершины может число компонент и уменьшить: изолированная вершина сама была компонентой.

Формат ввода

Первая строка содержит числа nn (1≤n≤2⋅1041 \le n \le 2 \cdot 10^4) и mm (0≤m≤2⋅1050 \le m \le 2 \cdot 10^5).

Далее идут mm строк с рёбрами. Граф не обязан быть связным; возможны кратные рёбра и петли.

Формат вывода

Одно число — наибольшее возможное количество компонент связности после удаления одной вершины.

Примеры

ввод
3 2
1 2
2 3
вывод
2
ввод
1 0
вывод
0
Войдите, чтобы отправлять решения.