동치 증명

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

요약
이미 증명된 함의들로 이루어진 방향 그래프에서 모든 명제가 서로 동치가 되도록 추가해야 할 최소 함의 개수를 구하는 문제입니다.
난이도

보통10점 중 6점

유형
그래프, 유니온 파인드, 그리디
정답자
아직 제출이 없습니다

문제

위대한 수학자 김선영은 선형대수학 교과서를 집필하다가 다음 문제를 만들었다.

N×NN \times N 행렬 AA에 대하여 다음 명제들이 서로 동치임을 증명하여라.

  1. AA의 역행렬이 존재한다.
  2. 임의의 N×1N \times 1 행렬 bb에 대하여 Ax=bAx = b는 유일한 해를 가진다.
  3. 임의의 N×1N \times 1 행렬 bb에 대하여 Ax=bAx = b는 해를 가진다.
  4. Ax=0Ax = 0의 해는 x=0x = 0 하나뿐이다.

이런 문제를 푸는 일반적인 방법은 함축(implication)의 사슬을 이용하는 것이다. 예를 들어 다음과 같이 증명할 수 있다.

(1)이면 (2)이고, (2)이면 (3)이며, (3)이면 (4)이고, 마지막으로 (4)이면 (1)이다. 이 네 개의 함축은 네 명제가 모두 동치임을 보여준다.

또 다른 방법은 (1)이면 (2)이고 (2)이면 (1)임을 보여 (1)과 (2)가 동치임을 증명하고, 같은 방식으로 (2)와 (3), (3)과 (4)가 각각 동치임을 증명하는 것이다. 하지만 이 방법은 무려 여섯 번의 함축을 필요로 한다.

김선영은 교과서를 쓰면서 수많은 명제가 동치임을 증명해야 하므로 이러한 비효율은 치명적이다. 되도록 적은 수의 함축만으로 명제들이 동치임을 증명할 수 있도록 도와주자.

일반적으로 nn개의 명제와 이미 증명된 mm개의 함축이 주어진다. 각 함축은 "명제 s1s_1이 참이면 명제 s2s_2도 참이다"를 뜻한다. 주어진 모든 명제가 서로 동치임을(즉, 어느 하나가 참이면 나머지도 모두 참임을) 증명하기 위해 추가로 증명해야 하는 함축의 최소 개수를 구하여라.

입력

첫째 줄에 테스트 케이스의 개수 TT (1≤T≤1001 \le T \le 100)가 주어진다.

각 테스트 케이스는 다음과 같이 주어진다.

  • 첫째 줄에 명제의 개수 nn (1≤n≤200001 \le n \le 20000)과 이미 증명된 함축의 개수 mm (0≤m≤500000 \le m \le 50000)이 공백으로 구분되어 주어진다.
  • 이어지는 mm개의 줄에 각각 두 정수 s1s_1, s2s_2 (1≤s1,s2≤n1 \le s_1, s_2 \le n, s1≠s2s_1 \ne s_2)가 주어진다. 이는 "명제 s1s_1이 참이면 명제 s2s_2도 참이다"라는 이미 증명된 함축을 뜻한다.

출력

각 테스트 케이스마다 한 줄에 정수 하나를 출력한다.

주어진 모든 명제가 서로 동치임을 증명하기 위해 추가로 증명해야 하는 함축의 최소 개수를 출력한다.

예제6

  1. 예제 1

    입력
    2
    4 0
    3 2
    1 2
    1 3
    
    예상 출력
    4
    2
    
  2. 예제 2

    입력
    1
    1 0
    
    예상 출력
    0
    
  3. 예제 3

    입력
    1
    3 3
    1 2
    2 3
    3 1
    
    예상 출력
    0
    
  4. 예제 4

    입력
    1
    4 3
    1 2
    2 3
    3 4
    
    예상 출력
    1
    
  5. 예제 5

    입력
    1
    2 0
    
    예상 출력
    2
    
  6. 예제 6

    입력
    1
    5 4
    1 3
    1 4
    2 4
    2 5
    
    예상 출력
    3