H. Сделать сильно связным
Сколько рёбер нужно добавить в ориентированный граф, чтобы он стал сильно связным? Добавлять можно ребро между любой парой различных вершин.
Если граф уже сильно связен — ноль. Иначе постройте конденсацию, посчитайте в ней истоки и стоки, и ответ равен
Нижняя оценка очевидна: в каждый исток надо завести хотя бы одно ребро, из каждого стока — вывести хотя бы одно, и одно добавленное ребро закрывает не больше одного истока и не больше одного стока.
Достижимость этой оценки — содержательная часть. Идея: выбрать в конденсации набор путей «исток — сток», не имеющих общих концов, и замкнуть их в один цикл, соединив сток -го пути с истоком -го; оставшиеся истоки и стоки прицепить к уже собранному циклу.
Отдельно стоит случай : одна вершина сильно связна сама по себе, ответ ноль. Формула его тоже даёт — истоков и стоков по одному, максимум единица, — и потому этот случай надо разобрать отдельно.
Формат ввода
Первая строка содержит числа () и ().
Далее идут строк с рёбрами. Возможны кратные рёбра и петли.
Формат вывода
Одно число.
Примеры
4 4 2 1 3 2 2 3 4 3
1
1 0
0