Degree Constrained Spanning Forest란, 양의 정수 K에 대해 각 정점의 차수가 K 이하인 Spanning Forest를 의미한다. 그래프와 차수 제한 K가 주어졌을 때 이를 만족하는 Degree Constrained Spanning Tree를 구하는 문제는 NP-Complete임이 알려져 있다.
지수 시간에 해결해야 하는 문제를 대회에 내고 싶지 않았던 정휘는, 새벽에 5시간 동안 고민한 끝에 조건을 덕지덕지 붙여서 다항 시간에 풀 수 있는 문제를 만들었다.
정점 N개와 간선 M개로 구성된 가중치 무방향 그래프가 주어진다. 이때 X개의 정점을 선택해 "특별한 정점", Y개의 정점을 선택해 "멋진 정점"이라고 하자. 여러분은 다음 조건을 만족하는 Spanning Forest 중, 간선을 1, 2, ⋯, N−1개 사용한 Spanning Forest의 간선 가중치 합의 최솟값을 각각 구해야 한다.
첫째 줄에 N, M, X, Y가 공백으로 구분되어 주어진다. (2≤N≤300, 1≤M≤300, 1≤X,Y≤N)
둘째 줄에 특별한 정점의 목록 A_1, A_2, ⋯, A_X가 공백으로 구분되어 주어진다. (1≤A_i≤N, i=j이면 A_i=A_j)
셋째 줄에 특별한 정점의 차수 제한 K_1, K_2, ⋯, K_X가 공백으로 구분되어 주어진다. (1≤K_i≤N)
넷째 줄에 멋진 정점의 목록 B_1, B_2, ⋯, B_Y가 공백으로 구분되어 주어진다. (1≤K_i≤N, i=j이면 B_i=B_j)
다섯째 줄부터 M개의 줄에 걸쳐 두 간선이 연결하는 정점 번호 u_i, v_i와 간선의 가중치 w_i가 주어진다. (1≤u_i,v_i≤N, 1≤w_i≤200,000, u_i=v_i)
연결하는 정점 쌍이 동일한 간선이 여러 번 주어지지 않는다.
입력으로 주어지는 모든 수는 정수이다.
조건을 만족하도록 간선 i개를 이용해 Spanning Forest를 만들 수 있다면 i번째 줄에 가중치 합의 최솟값을 출력한다.
간선 i개를 이용해 조건을 만족하는 Spanning Forest를 만들 수 없다면 i번째 줄에 −1을 출력한다.