만드는 중입니다

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

전력공급

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

요약
건물의 부분집합을 골라 그 잉여 전력에서 집합 밖으로 나가는 송전량을 뺀 값을 최대로 만든다. 최대 폐쇄 부분그래프 문제로, 최소 컷으로 푼다. 건물을 잉여가 양수인 쪽과 음수인 쪽으로 나누고, 간선 비용을 흐름으로 모델링한다. 각 테스트마다 최대 유량을 계산해 답을 구한다.
난이도

보통10점 중 7점

유형
그래프, 최소 신장 트리, 그리디, 수학
정답자
아직 제출이 없습니다

문제

Bob이 살고 있는 Alberta 도시에는 nn개의 건물이 있고 11번부터 nn번까지 번호가 붙어있다. 각 건물은 일정량의 전기를 생산하고 소비한다. viv_i는 ii번째 빌딩의 전력 생산량에서 소비량을 뺀 값으로 해당 빌딩의 "잉여 전력"을 나타낸다. 만약 건물의 소비량이 생산량보다 크다면 viv_i값은 음수가 된다. viv_i가 0인 경우는 없고, 항상 정수이다.

일부 건물은 서로 전선으로 연결되어 있어서 한 건물에서 생산한 전력의 일부를 다른 건물에 보내주기도 한다. 현재 전선은 총 mm개가 있고 11번부터 mm번까지 번호가 붙어있다. jj번째 전선은 건물 xjx_j에서 건물 yjy_j로 zj>0z_j > 0만큼의 전력을 공급해 준다. 각 전선은 방향성이 있고, 두 건물 사이에는 같은 방향의 전선은 최대 한 개만 있을 수 있다.

전기가 매우 중요한 자원이 되었기 때문에 Bob은 nn개의 건물 중 일부 건물을 사들여 이 건물들의 잉여 전력 총량이 최대가 되도록 하고 싶다. 구체적으로, SS가 {1,2,…,n}\{1, 2, \dots, n\}의 부분집합일 때, 즉, Bob이 SS에 속한 건물들을 사기로 했을 때, SS의 잉여 전력 총량인 V(S)V(S)는 아래와 같이 정의 된다.

  • (SS에 속한 건물들의 잉여 전력 총합) - (SS에 속한 건물들이 SS에 속하지 않은 건물들에 전선을 통해 공급하는 전력의 총합)

예를 들어 n=3n = 3, m=2m = 2, v1=4v_1 = 4, v2=−1v_2 = -1, v3=−2v_3 = -2, x1=1x_1 = 1, x2=2x_2 = 2, y1=2y_1 = 2, y2=3y_2 = 3, z1=1z_1 = 1, z2=1z_2 = 1 이라 하자.

  • 건물 11은 자체 전력 생산량이 소비량보다 커서 잉여 전력이 44이며 다른 두 건물은 잉여 전력이 음수이다.
  • 11번 전선은 건물 11에서 건물 22로 11만큼의 전력을 공급한다.
  • 22번 전선은 건물 22에서 건물 33으로 11만큼의 전력을 공급한다.

이 예제에서 Bob이 건물을 살 방법은 총 23=82^3 = 8가지가 있는데, 각 경우에 대한 잉여 전력 총량은 아래와 같다.

  • SS가 공집합인 경우: V(S)=0V(S) = 0.
  • S={1}S = \{1\}인 경우: V(S)=4−1=3V(S) = 4 - 1 = 3.
  • S={2}S = \{2\}인 경우: V(S)=(−1)−1=−2V(S) = (-1) - 1 = -2.
  • S={3}S = \{3\}인 경우: V(S)=(−2)−0=−2V(S) = (-2) - 0 = -2.
  • S={1,2}S = \{1, 2\}인 경우: V(S)=(4−1)−1=2V(S) = (4-1) - 1 = 2. 이 경우, 11번 전선의 경우 건물 11에서 건물 22로 전력을 공급하지만 두 건물 모두 사들인다면 위 정의에 따라 V(S)V(S)를 계산할 때 고려하지 않는다.
  • S={2,3}S = \{2, 3\}인 경우: V(S)=(−1−2)−0=−3V(S) = (-1-2) - 0 = -3.
  • S={1,3}S = \{1, 3\}인 경우: V(S)=(4−2)−1=1V(S) = (4-2) - 1 = 1.
  • S={1,2,3}S = \{1, 2, 3\}인 경우: V(S)=(4−1−2)−0=1V(S) = (4-1-2) - 0 = 1.

88가지 방법 중 잉여 전력 총량이 최대가 되는 경우는 S={1}S = \{1\}인 경우이다.

다른 예로, n=2n = 2, m=1m = 1, v1=1v_1 = 1, v2=−5v_2 = -5, x1=1x_1 = 1, y1=2y_1 = 2, z1=1z_1 = 1이라 하자.

  • SS가 공집합인 경우: V(S)=0V(S) = 0.
  • S={1}S = \{1\}인 경우: V(S)=1−1=0V(S) = 1 - 1 = 0.
  • S={2}S = \{2\}인 경우: V(S)=−5V(S) = -5.
  • S={1,2}S = \{1, 2\}인 경우: V(S)=(1−5)−0=−4V(S) = (1-5) - 0 = -4.

총 44가지 방법 중 잉여 전력 총량이 최대가 되는 경우는 S={1}S = \{1\} 또는 SS가 공집합인 경우이다.

입력으로 nn, mm, vv, xx, yy, zz가 주어졌을 때, Bob이 달성할 수 있는 최대 잉여 전력 총량을 구해보자.

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다.

각 테스트 케이스의 첫 줄에는 nn과 mm이 공백으로 구분되어 주어진다.

둘째 줄에는 각 건물의 잉여 전력량 viv_i이 공백으로 구분되어 주어진다.

다음 mm줄에 걸쳐 각 줄에 세 개의 정수 xjx_j, yjy_j, zjz_j주어진다. 이는 건물 xjx_j에서 건물 yjy_j로 zjz_j만큼의 전력이 공급되고 있음을 나타낸다.

출력

각 테스트 케이스의 정답인 Bob이 달성할 수 있는 최대 잉여 전력량을 각 줄에 출력한다.

제한

  • 1≤i≤n1 ≤ i ≤ n인 모든 ii에 대하여 −100 000≤vi≤100 000-100\,000 ≤ v_i ≤ 100\,000 이고 vi≠0v_i \ne 0.
  • 1≤j≤m1 ≤ j ≤ m인 모든 jj에 대하여 xj≠yjx_j \ne y_j이고 1≤xj,yj≤n1 ≤ x_j, y_j ≤ n, 그리고 1≤zj≤100 0001 ≤ z_j ≤ 100\,000.
  • 1≤j<k≤m1 ≤ j < k ≤ m인 모든 jj, kk에 대하여 xj=xkx_j = x_k이고 동시에 yj=yky_j = y_k인 경우는 없다. 즉, 모든 전선은 방향을 고려했을 때 고유하다.

예제1

  1. 예제 1

    입력
    6
    2 1
    1 -2
    1 2 3
    2 1
    1 -2
    2 1 3
    3 2
    4 -1 -2
    1 2 1
    2 3 1
    3 6
    10 10 10
    1 2 2
    2 1 3
    1 3 4
    3 1 5
    2 3 6
    3 2 7
    2 1
    1 -5
    1 2 1
    3 2
    1 1 -2
    1 3 1
    2 3 1
    
    예상 출력
    0
    1
    3
    30
    0
    0