사이클이 없는 방향 그래프에서 모든 정점을 덮는 정점 서로소 방향 경로의 최소 개수를 구한다.
그래프에서 체인은 이웃한 두 정점 사이에 간선이 있는 정점 나열이다. 같은 정점이 여러 번 나올 수도 있고, 정점 하나만 있어도 체인이다.
사이클이 없는 방향 그래프가 주어진다. 모든 정점을 빠짐없이 덮으려면 체인이 최소 몇 개 필요한지 구하여라.
서로 다른 두 체인은 정점을 공유할 수 없다. 또 체인 v1,v2,…,vkv_1, v_2, \dots, v_kv1,v2,…,vk가 되려면 모든 iii에 대해 viv_ivi에서 vi+1v_{i+1}vi+1로 가는 간선이 있어야 한다. 간선은 방향을 거슬러 갈 수 없다.
첫째 줄에 정점의 개수 NNN(1≤N≤100001 \le N \le 100001≤N≤10000)과 간선의 개수 MMM(0≤M≤1000000 \le M \le 1000000≤M≤100000)이 주어진다. 정점은 111번부터 NNN번까지 번호가 매겨져 있다.
둘째 줄부터 MMM개의 줄에 간선 정보 uuu, vvv가 주어진다. uuu에서 vvv로 가는 방향 간선이라는 뜻이다. 같은 간선이 두 번 이상 주어질 수 있다.
주어지는 그래프에는 사이클이 없다.
모든 정점을 덮는 데 필요한 체인 개수의 최솟값을 한 줄에 출력한다.
첫 번째 예제는 2→7→3→62 \to 7 \to 3 \to 62→7→3→6과 1→5→41 \to 5 \to 41→5→4, 두 체인으로 일곱 정점을 모두 덮는다.