트리 변환 최소 비용
시간 제한3초메모리 제한1024 MB
가중치가 있는 순서 있는 루트 트리 두 개가 주어질 때, 네 가지 연산으로 첫 번째 트리를 두 번째 트리로 바꾸는 최소 비용을 구합니다.
문제
두 개의 가중치가 있는 뿌리 있는 트리가 주어진다. 각 정점의 자식은 순서가 정해져 있으며 왼쪽에서 오른쪽으로 배열된다. 기본 연산은 네 가지다.
-
성장: 정점 의 자식 리스트가 일 때, 새 정점 를 추가하고 와 를 잇는 간선을 만든다. 그다음 를 자식 리스트의 번째 위치에 넣어 리스트가 이 되게 한다. 비용은 새 간선 의 가중치에 을 곱한 값이다.
-
확장: 정점 의 자식 리스트가 일 때, 구간 ()을 고른다. 새 정점 를 의 부모로 추가하고 와 를 잇는다. 의 자식 리스트는 이 되고, 의 자식 리스트는 이 된다. 간선 의 가중치는 원래 트리의 와 같다. 비용은 새 간선 의 가중치에 을 곱한 값이다.
-
축약: 정점 의 자식 를 하나 고른다. 의 자식 리스트가 일 때 간선 를 축약한다. 는 제거되고, 의 자식 리스트는 이 된다. 간선 의 가중치는 의 가중치와 같다. 비용은 원래 트리에서 간선 의 가중치에 를 곱한 값이다.
-
가중치 변경: 정점 와 그 자식 에 대해 간선 의 가중치를 에서 로 바꾼다. 비용은 다.
성장이나 확장으로 추가된 간선 는 가중치를 바꿀 수 없다. 가중치를 바꾼 간선은 축약할 수 없다.
첫 번째 트리를 두 번째 트리로 바꾸는 최소 비용을 구한다. 뿌리와 자식 순서를 보존하는 정점 간 전단사 대응이 있고, 대응하는 간선의 가중치가 모두 같으면 두 트리는 같은 트리로 본다.
입력
첫 줄에 세 정수 , , ()이 주어진다. 이어서 두 트리가 주어진다. 각 트리마다 첫 줄에 정점 수 이 있고, 다음 개의 줄에는 자식 수 와 개의 정수 ()가 차례로 적혀 있다. 이는 자식 리스트와 자식으로 향하는 간선의 가중치다.
첫 번째 트리의 정점 수는 50 이하이고, 두 번째 트리의 정점 수는 2000 이하다.
출력
답을 출력한다.