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