경비원
시간 제한2초메모리 제한128 MB
건물들이 트리 형태로 연결된 성의 모든 통로를 감시하도록 최소 경비 인원(최소 정점 커버)을 재귀적으로 파싱한 그래프에서 계산하는 문제입니다.
문제
어떤 왕국의 왕은 왕국의 위대함을 널리 알리기 위해 거대한 성을 지으려 한다. 성은 여러 개의 빌딩이 서로 연결된 형태이며, 각 빌딩은 여러 개의 홀과 그 홀들을 잇는 복도로 이루어져 있다.
처음에 성은 빌딩 하나로만 이루어져 있고, 이 빌딩을 메인 빌딩이라고 부른다. 왕국의 인구가 늘어날 때마다 성은 다음과 같이 확장된다. 새로운 부속 빌딩이 지어지면 그 빌딩은 이미 존재하던 빌딩 하나와 연결된다. 새 빌딩도 다른 빌딩과 마찬가지로 홀과 복도로 이루어진다. 이때 기존 빌딩의 어떤 홀과 새 빌딩의 어떤 홀을 잇는 새로운 복도를 하나 놓는데, 이 복도는 새 빌딩으로 통하는 유일한 통로이다.
한 빌딩에 있을 수 있는 홀의 최대 개수는 개이다. 이렇게 만들어진 빌딩들의 연결 관계는 트리 구조를 이룬다.
왕은 모든 홀에 전략적으로 경비원을 배치하여 성의 모든 복도를 감시하려고 한다. 경비원은 자신이 서 있는 홀에 연결된 모든 복도를 감시할 수 있으므로, 어떤 복도든 그 복도가 잇는 두 홀 중 적어도 한 곳에 경비원이 있으면 그 복도는 감시된다. 왕은 개인 경호에 인력을 최대한 남겨 두고 싶어 하므로, 성의 모든 복도(빌딩 내부의 복도와 빌딩 사이를 잇는 복도 모두)를 감시하는 데 필요한 경비원의 수를 최소로 하려고 한다.
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 각 성은 재귀적으로 정의되며, 메인 빌딩부터 주어진다. 모든 홀은 이상 이하의 정수로 구별되고, 한 성 안에서 홀 번호는 서로 다르다.
하나의 빌딩에 대한 정보는 다음과 같이 주어진다. 첫 줄에 그 빌딩을 이루는 홀의 수 (), 빌딩 내부 복도의 수 (), 그리고 이 빌딩에 직접 연결된 부속 빌딩의 수 ()가 주어진다.
이어서 개의 줄에 걸쳐 이 빌딩 내부 복도의 정보가 주어진다. 각 줄에는 그 복도가 잇는 두 홀의 번호가 주어지며, 두 홀은 항상 같은 빌딩 안에 있다.
그 다음 개의 부속 빌딩에 대한 정보가 차례로 주어진다. 각 부속 빌딩마다 먼저 한 줄에 두 정수가 주어지는데, 이는 현재 빌딩의 홀 번호와 그 부속 빌딩의 홀 번호로, 두 빌딩을 잇는 복도를 나타낸다. 그 줄 바로 다음에 해당 부속 빌딩의 정보가 메인 빌딩과 같은 형식으로 재귀적으로 주어진다.
성은 항상 전체가 연결되어 있다. 즉, 임의의 두 홀은 직접 또는 다른 홀을 거쳐 연결되어 있다. 같은 두 홀을 잇는 복도는 최대 한 개만 존재한다. 입력은 파일의 끝까지 계속되며, 각 테스트 케이스는 하나의 완전한 성을 나타낸다.
출력
각 테스트 케이스마다 성의 모든 복도를 감시하는 데 필요한 경비원 수의 최솟값을 한 줄에 하나씩 출력한다.