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

Задача . E. TOF


Сегодня Пари задала Арию интересную графовую задачу. Арий написал неоптимальное решение, потому что верит, что может протолкнуть неоптимальное решение в любой задаче. Но его решение не только не оптимальное, оно ещё и содержит ошибки, а поскольку Арий долго пытался его оптимизировать, то код стал совсем «грязным». Арий продолжал получать вердикт Time Limit Exceeded и совсем уже расстроился, когда ему в голову пришла прекрасная идея!

Вот так выглядит сейчас его код:


dfs(v)
{
set count[v] = count[v] + 1
if(count[v] < 1000)
{
foreach u in neighbors[v]
{
if(visited[u] is equal to false)
{
dfs(u)
}
break
}
}
set visited[v] = true
}

main()
{
input the digraph()
TOF()
foreach 1<=i<=n
{
set count[i] = 0 , visited[i] = false
}
foreach 1 <= v <= n
{
if(visited[v] is equal to false)
{
dfs(v)
}
}
... // And do something cool and magical but we can't tell you what!
}

Арий просит вас написать функцию TOF, которая будет уменьшать количество вызовов функции dfs. На вход подаётся ориентированный граф, и функция TOF должна переставить каким-то образом рёбра графа, то есть изменить порядок вершин в списке смежности neighbors каждой вершины. Количество вызовов функции dfs, разумеется, зависит от того, какой порядок для вершин в neighbors выбрать.

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

В первой строке входных данных записаны два целых числа n и m (1 ≤ n, m ≤ 5000) — количество вершин и количество ориентированных рёбер во входном графе.

В каждой из последующих m строк записана пара целых чисел ui и vi (1  ≤  ui,  vi  ≤  n), означающая, что во входном графе существует ориентированное ребро .

Гарантируется, что в графе нет петель и что каждая неупорядоченная пара вершин соединена не более чем одним ориентированным ребром.

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

Выведите единственное целое число — минимальное возможно количество вызовов функции dfs, которого можно достигнуть, переставив правильно рёбра.


Примеры
Входные данныеВыходные данные
1 3 3
1 2
2 3
3 1
2998
2 6 7
1 2
2 3
3 1
3 4
4 5
5 6
6 4
3001

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

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