최소 체인 커버

사이클이 없는 방향 그래프에서 모든 정점을 덮는 정점 서로소 방향 경로의 최소 개수를 구한다.

어려움8그래프동적 계획법최단 경로아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

그래프에서 체인은 이웃한 두 정점 사이에 간선이 있는 정점 나열이다. 같은 정점이 여러 번 나올 수도 있고, 정점 하나만 있어도 체인이다.

사이클이 없는 방향 그래프가 주어진다. 모든 정점을 빠짐없이 덮으려면 체인이 최소 몇 개 필요한지 구하여라.

서로 다른 두 체인은 정점을 공유할 수 없다. 또 체인 v1,v2,,vkv_1, v_2, \dots, v_k가 되려면 모든 ii에 대해 viv_i에서 vi+1v_{i+1}로 가는 간선이 있어야 한다. 간선은 방향을 거슬러 갈 수 없다.

입력

첫째 줄에 정점의 개수 NN(1N100001 \le N \le 10000)과 간선의 개수 MM(0M1000000 \le M \le 100000)이 주어진다. 정점은 11번부터 NN번까지 번호가 매겨져 있다.

둘째 줄부터 MM개의 줄에 간선 정보 uu, vv가 주어진다. uu에서 vv로 가는 방향 간선이라는 뜻이다. 같은 간선이 두 번 이상 주어질 수 있다.

주어지는 그래프에는 사이클이 없다.

출력

모든 정점을 덮는 데 필요한 체인 개수의 최솟값을 한 줄에 출력한다.

힌트

첫 번째 예제는 27362 \to 7 \to 3 \to 61541 \to 5 \to 4, 두 체인으로 일곱 정점을 모두 덮는다.