약하게 연결된 방향 그래프가 주어질 때, 모든 정점이 서로 도달할 수 있도록 추가할 최소 간선 수를 구한다.
보통7그래프그리디DFS아직 제출이 없습니다시간 제한5초메모리 제한512 MB놀이공원에는 놀이기구 사이사이에 넓은 숲이 그대로 남아 있다. 나무 꼭대기를 잇는 산책로를 따라가면 방문객은 나뭇가지 위를 지나며 주변 언덕과 호수를 내려다본다.
산책로는 땅에서 저마다 다른 높이로 나무 꼭대기 가까이에 세운 나무 발판과, 발판을 잇는 좁은 나무 길로 이루어진다. 길 하나는 정확히 두 발판을 잇고, 한 발판에 모이는 길의 개수는 발판마다 다르다. 방향을 무시하면 어느 발판에서 출발해도 길만 따라 다른 모든 발판에 갈 수 있다.
안전 기준을 높이고 몇몇 구간에 몰리는 혼잡을 줄이려고 운영진은 모든 길을 일방통행으로 바꿨다. 방향을 정하고 나자 문제가 드러났다. 정해진 방향만 지켜 걸으면 어떤 발판에서 다른 어떤 발판으로는 갈 수 없다. 운영진이 미관과 운영을 따져 정한 방향이라 다시 바꾸지는 않는다.
대신 이미 있는 발판 사이에 일방통행 길을 더 놓기로 했다. 발판을 새로 세우지 않고 기존 길의 방향도 그대로 둔다. 새 길을 놓은 뒤에는 어느 발판에서든 길만 따라 다른 모든 발판에 갈 수 있어야 한다. 운영진은 새로 놓는 길의 개수를 가장 적게 하려고 한다.
새로 놓아야 하는 길의 최소 개수를 구하라.
입력은 여러 개의 테스트 케이스로 이루어지고 파일 끝에서 끝난다.
각 테스트 케이스의 첫 줄에는 발판의 개수 N과 이미 있는 길의 개수 M이 공백으로 구분되어 주어진다 (1≤N≤105, 0≤M≤2⋅105). 발판에는 1번부터 N번까지 번호가 붙어 있다.
다음 M개의 줄에는 서로 다른 발판 번호 A와 B가 주어지며, A에서 B로 가는 일방통행 길이 있다는 뜻이다. 한 테스트 케이스 안에서 같은 순서쌍 (A,B)가 두 번 나오지는 않지만, A→B와 B→A가 함께 나올 수는 있다. 방향을 무시하면 한 테스트 케이스의 길은 N개의 발판을 모두 연결한다.
각 테스트 케이스마다 정수 R을 한 줄에 출력한다. R은 어느 발판에서든 다른 모든 발판으로 갈 수 있게 만드는 데 필요한 새 일방통행 길의 최소 개수다. 이 개수만 출력하면 되고, 새로 놓을 길까지 출력할 필요는 없다.