EduBrick

H. Сделать сильно связным

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

Сколько рёбер нужно добавить в ориентированный граф, чтобы он стал сильно связным? Добавлять можно ребро между любой парой различных вершин.

Если граф уже сильно связен — ноль. Иначе постройте конденсацию, посчитайте в ней истоки и стоки, и ответ равен

max⁡(истоков, стоков).\max(\text{истоков},\ \text{стоков}).

Нижняя оценка очевидна: в каждый исток надо завести хотя бы одно ребро, из каждого стока — вывести хотя бы одно, и одно добавленное ребро закрывает не больше одного истока и не больше одного стока.

Достижимость этой оценки — содержательная часть. Идея: выбрать в конденсации набор путей «исток — сток», не имеющих общих концов, и замкнуть их в один цикл, соединив сток ii-го пути с истоком (i+1)(i+1)-го; оставшиеся истоки и стоки прицепить к уже собранному циклу.

Отдельно стоит случай n=1n = 1: одна вершина сильно связна сама по себе, ответ ноль. Формула его тоже даёт — истоков и стоков по одному, максимум единица, — и потому этот случай надо разобрать отдельно.

Формат ввода

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

Далее идут mm строк с рёбрами. Возможны кратные рёбра и петли.

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

Одно число.

Примеры

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