만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

트리 변환 최소 비용

시간 제한3초메모리 제한1024 MB

요약
가중치가 있는 순서 있는 루트 트리 두 개가 주어질 때, 네 가지 연산으로 첫 번째 트리를 두 번째 트리로 바꾸는 최소 비용을 구합니다.
난이도

어려움10점 중 8점

유형
트리, 동적 계획법, 재귀
정답자
아직 제출이 없습니다

문제

두 개의 가중치가 있는 뿌리 있는 트리가 주어진다. 각 정점의 자식은 순서가 정해져 있으며 왼쪽에서 오른쪽으로 배열된다. 기본 연산은 네 가지다.

  1. 성장: 정점 xx의 자식 리스트가 y1,…,ymy_1, \ldots, y_m일 때, 새 정점 zz를 추가하고 xx와 zz를 잇는 간선을 만든다. 그다음 zz를 자식 리스트의 kk번째 위치에 넣어 리스트가 y1,…,yk−1,z,yk,…,ymy_1, \ldots, y_{k-1}, z, y_k, \ldots, y_m이 되게 한다. 비용은 새 간선 (x,z)(x, z)의 가중치에 c1c_1을 곱한 값이다.

  2. 확장: 정점 xx의 자식 리스트가 y1,…,ymy_1, \ldots, y_m일 때, 구간 [l,r][l, r] (1≤l≤r≤m1 \le l \le r \le m)을 고른다. 새 정점 zz를 yl,…,yry_l, \ldots, y_r의 부모로 추가하고 xx와 zz를 잇는다. xx의 자식 리스트는 y1,…,yl−1,z,yr+1,…,ymy_1, \ldots, y_{l-1}, z, y_{r+1}, \ldots, y_m이 되고, zz의 자식 리스트는 yl,…,yry_l, \ldots, y_r이 된다. 간선 (z,yi)(z, y_i)의 가중치는 원래 트리의 (x,yi)(x, y_i)와 같다. 비용은 새 간선 (x,z)(x, z)의 가중치에 c1c_1을 곱한 값이다.

  3. 축약: 정점 xx의 자식 yky_k를 하나 고른다. yky_k의 자식 리스트가 z1,…,zpz_1, \ldots, z_p일 때 간선 (x,yk)(x, y_k)를 축약한다. yky_k는 제거되고, xx의 자식 리스트는 y1,…,yk−1,z1,…,zp,yk+1,…,ymy_1, \ldots, y_{k-1}, z_1, \ldots, z_p, y_{k+1}, \ldots, y_m이 된다. 간선 (x,zi)(x, z_i)의 가중치는 (yk,zi)(y_k, z_i)의 가중치와 같다. 비용은 원래 트리에서 간선 (x,yk)(x, y_k)의 가중치에 c2c_2를 곱한 값이다.

  4. 가중치 변경: 정점 xx와 그 자식 yy에 대해 간선 (x,y)(x, y)의 가중치를 w1w_1에서 w2w_2로 바꾼다. 비용은 c3⋅∣w1−w2∣c_3 \cdot |w_1 - w_2|다.

성장이나 확장으로 추가된 간선 (x,z)(x, z)는 가중치를 바꿀 수 없다. 가중치를 바꾼 간선은 축약할 수 없다.

첫 번째 트리를 두 번째 트리로 바꾸는 최소 비용을 구한다. 뿌리와 자식 순서를 보존하는 정점 간 전단사 대응이 있고, 대응하는 간선의 가중치가 모두 같으면 두 트리는 같은 트리로 본다.

입력

첫 줄에 세 정수 c1c_1, c2c_2, c3c_3 (1≤c1,c2,c3≤1061 \le c_1, c_2, c_3 \le 10^6)이 주어진다. 이어서 두 트리가 주어진다. 각 트리마다 첫 줄에 정점 수 nn이 있고, 다음 nn개의 줄에는 자식 수 kk와 2k2k개의 정수 c1,w1,…,ck,wkc_1, w_1, \ldots, c_k, w_k (0≤ci≤1060 \le c_i \le 10^6)가 차례로 적혀 있다. 이는 자식 리스트와 자식으로 향하는 간선의 가중치다.

첫 번째 트리의 정점 수는 50 이하이고, 두 번째 트리의 정점 수는 2000 이하다.

출력

답을 출력한다.

예제1

  1. 예제 1

    입력
    1 1 2
    4
    2 2 5 4 2
    1 3 1
    0
    0
    3
    2 2 1 3 2
    0
    0
    
    예상 출력
    5