만드는 중입니다

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

트리

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

요약
각 노드에 정수가 적힌 트리에서 서로 겹치지 않고 간선으로 이어지지 않은 연결된 부분 그래프 두 개를 골라, 노드 값 합의 최댓값을 구합니다.
난이도

보통10점 중 6점

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

문제

노드가 NN개인 트리 T=(V,E)T = (V, E)가 있다. 각 노드에는 정수가 하나씩 적혀 있으며, 음수일 수도 있다. 다음 조건을 만족하는 TT의 부분 그래프 Ta=(Va,Ea)T_a = (V_a, E_a)와 Tb=(Vb,Eb)T_b = (V_b, E_b)를 구하려고 한다.

  • Va≠∅V_a \ne \emptyset, Vb≠∅V_b \ne \emptyset
  • TaT_a와 TbT_b는 각각 연결 그래프이다.
  • Va∩Vb=∅V_a \cap V_b = \emptyset
  • VaV_a에 속한 노드와 VbV_b에 속한 노드를 잇는 간선은 EE에 없다.
  • VaV_a에 속한 노드에 적힌 정수의 합과 VbV_b에 속한 노드에 적힌 정수의 합을 더한 값이 최대가 되어야 한다.

다음 그림이 예시이다. T=({0,1,2,3,4,5,6},{(0,1),(0,2),(2,3),(2,4),(4,6),(5,6)})T = (\{0,1,2,3,4,5,6\}, \{(0, 1), (0,2), (2, 3), (2,4), (4,6), (5,6)\})이다.

노드 위의 숫자는 노드 번호이고, 노드 안의 수가 그 노드에 적힌 값이다. 조건을 만족하는 TaT_a와 TbT_b를 고르는 방법은 여럿이다. Va={0,2,3},Vb={5,6}V_a=\{0,2,3\}, V_b=\{5,6\}으로 잡으면 합이 {3+(−1)+4}+{5+3}=14\{3+(-1)+4\} + \{5+3\} = 14로 최대가 된다. 다른 방법으로는 1414보다 큰 값을 만들 수 없다.

구현할 함수

다음 함수를 작성해야 한다.

long long findSum( int N, int C[], int Node1[], int Node2[] );

이 함수는 한 번만 호출된다. 입력은 인자로 전달되며, 함수의 반환값이 문제의 답이다. NN은 노드의 개수이다. 노드는 00번부터 N−1N-1번까지 번호가 붙어 있다. 0≤i≤N−10 \le i \le N-1일 때 번호가 ii인 노드에 적힌 수는 C[i]C[i]이다. 0≤i≤N−20 \le i \le N-2일 때 번호가 Node1[i]Node1[i]인 노드와 번호가 Node2[i]Node2[i]인 노드가 간선으로 연결되어 있다.

제한

  • −109≤Ci≤109-10^9 \le C_i \le 10^9
  • 3≤N≤500 0003 \le N \le 500\,000

예제1

  1. 예제 1

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