나무 다듬기
시간 제한1초메모리 제한1024 MB
주문한 M그루 중 N그루를 골라 목표 나무 N그루와 하나씩 짝짓고, 가지를 잘라 모양을 맞출 때 필요한 최소 절단 수를 구합니다.
문제
스웨덴 코딩 컵 결승을 준비하며 조직위원회는 시상식장을 아름다운 향나무로 꾸미려 합니다. 위원회는 각각 고유한 모양을 가진 그루의 나무로 이루어진 배치를 설계했습니다. 대회의 상주 수목 관리사인 당신이 할 일은 이 나무들을 고치는 것입니다.
당신은 그루의 나무를 주문했고, 배송품은 1분 전에 도착했습니다. 배치와 정확히 같은 모양의 나무를 그루 고르지 못할 수도 있습니다. 이 경우 일부 나무의 가지를 잘라 배치가 요구하는 모양으로 바꿔야 합니다. 대회가 막 시작되었으므로, 시상식 전에 지금 바로 나무를 고쳐야 합니다.
정확히 말하면, 나무는 뿌리에서 여러 가지(가지가 전혀 없을 수도 있음)가 뻗어 나온 형태입니다. 각 가지는 꼭짓점이라 불리는 점에서 끝나며, 그 꼭짓점에서는 새 가지가 몇 개든 뻗어 나올 수 있습니다. 가지와 꼭짓점의 구조가 같으면 두 나무는 같은 모양입니다. 한 꼭짓점에서 가지가 자라는 순서는 상관없습니다.
나무의 모양을 바꾸려면 믿음직한 전지가위로 꼭짓점에서 자라는 가지를 한 번에 하나씩 잘라낼 수 있습니다. 가지는 나무의 어느 부분에서든 자를 수 있습니다. 가지를 자르면 그 아래의 부분 나무 전체가 떨어집니다. 가능한 한 빨리 끝내고 싶습니다. 그루의 나무를 골라 최적으로 자른다면, 모두 몇 번 잘라야 합니까?
입력
첫 번째 줄에 두 정수 (, 배치에 있는 나무의 수)과 (, 주문한 나무의 수)이 주어집니다.
이어서 개의 나무 설명이 나옵니다. 먼저 배치의 나무 개가 나오고, 그다음 주문한 나무 개가 나옵니다. 나무 설명은 가지의 개수 로 시작합니다. 다음 줄에는 개의 정수 가 주어지며, 모든 에 대해 입니다. 는 꼭짓점 와 꼭짓점 사이에 가지가 있다는 뜻입니다. 가지가 뿌리에서 자라면 이 값은 입니다.
개의 나무 전체에서 가지는 최대 개입니다. 설명한 방식으로 나무를 변형할 수 있다고 보장됩니다.
출력
주문한 나무 중 그루를 배치의 나무 모양으로 바꾸는 데 필요한 최소 자르기 횟수, 즉 잘라야 하는 간선의 최소 개수를 하나의 정수로 출력합니다.
힌트
첫 번째 예제에서는 주문한 나무가 3그루이고, 만들어야 할 나무는 2그루입니다. 주문한 두 번째 나무는 배치의 첫 번째 나무와 정확히 같으므로, 자르지 않고 그대로 고를 수 있습니다. 주문한 세 번째 나무는 배치의 두 번째 나무와 비슷하지만, 뿌리에서 가지가 하나 더 나와 있습니다. 따라서 한 번만 잘라서 고칠 수 있습니다.