아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

고객 서비스 계획

시간 제한1초메모리 제한128 MB

요약
거리와 수요를 곱한 비용이 예산을 넘지 않는 선에서 우선순위 합이 가장 커지도록 고객을 고릅니다.
난이도

보통10점 중 5점

유형
동적 계획법, 최단 경로
정답자
아직 제출이 없습니다

문제

가중 그래프 G=(V,E)G = (V, E)의 정점 몇 곳에 시설 하나와 여러 고객이 있다. 고객 jj마다 음이 아닌 수요 djd_j와 그 고객의 중요도를 나타내는 음이 아닌 우선순위 pjp_j가 주어진다.

고객 jj의 서비스 비용은 cj×djc_j \times d_j이다. 여기서 cjc_j는 그래프 GG에서 시설이 있는 정점부터 고객 jj가 있는 정점까지의 최단 거리다. 예를 들어 아래 그림에서 고객 aa의 서비스 비용은 3×da3 \times d_a이고, dad_a는 고객 aa의 수요다. 같은 그림에서 고객 bb는 시설까지 가는 경로가 없으므로 서비스 비용이 무한대다.

고객 집합의 부분집합 중에서, 그 부분집합에 속한 고객의 서비스 비용 합이 음이 아닌 예산 BB를 넘지 않으면서 우선순위 합이 가장 큰 경우를 찾는 프로그램을 작성하시오.

입력

입력은 표준 입력으로 주어진다. 첫째 줄에 테스트 케이스의 개수 TT가 주어진다. (1≤T≤201 \le T \le 20)

각 테스트 케이스의 첫째 줄에는 그래프의 정점 개수 NN이 주어진다. (1≤N≤1001 \le N \le 100) 정점 번호는 00부터 N−1N-1까지이며, 00번 정점에 시설이 있다.

다음 줄에는 고객의 수 MM이 주어진다. (0≤M≤1000 \le M \le 100) 이어지는 MM개 줄에는 고객 한 명의 정보가 정수 세 개로 주어진다. 차례대로 고객이 있는 정점 번호, 수요, 우선순위다. 정점 번호는 00 이상 N−1N-1 이하이고, 수요와 우선순위는 각각 00 이상 100100 이하다.

다음 줄에는 전체 예산 BB가 주어진다. (0≤B≤1000 \le B \le 100)

다음 줄에는 간선의 개수 LL이 주어진다. (0≤L≤1000 \le L \le 100) 이어지는 LL개 줄에는 간선 하나의 정보가 정수 세 개로 주어진다. 앞의 두 정수는 간선이 잇는 두 정점의 번호이고, 세 번째 정수는 간선의 비용이다. 정점 번호는 00 이상 N−1N-1 이하이고, 비용은 00 이상 100100 이하다. 간선에는 방향이 없다.

출력

출력은 표준 출력으로 한다. 테스트 케이스마다 서비스 대상으로 고른 고객의 우선순위 합을 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    2
    4
    4
    1 5 7
    2 35 20
    3 12 32
    3 10 2
    30
    5
    0 1 5
    0 2 4
    1 3 13
    2 3 4
    1 2 2
    6
    6
    1 3 4
    1 2 4
    3 4 5
    3 2 1
    4 6 3
    5 1 2
    20
    8
    0 1 3
    1 2 5
    2 3 3
    3 4 5
    4 5 10
    0 5 4
    0 3 4
    2 5 6
    
    예상 출력
    7
    10