만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

최소 체인 커버

시간 제한2초메모리 제한512 MB

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

어려움10점 중 8점

유형
그래프, 동적 계획법, 최단 경로
정답자
아직 제출이 없습니다

문제

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

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

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

입력

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

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

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

출력

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

힌트

첫 번째 예제는 2→7→3→62 \to 7 \to 3 \to 6과 1→5→41 \to 5 \to 4, 두 체인으로 일곱 정점을 모두 덮는다.

예제1

  1. 예제 1

    입력
    7 11
    1 2
    1 5
    2 5
    2 3
    2 7
    3 4
    3 6
    4 6
    5 4
    5 6
    7 3
    
    예상 출력
    2