트리 뒤집기

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

요약
서브트리를 뒤집어 앞면에 적힌 수의 합을 최대로 만들고, 그 최댓값에 도달하는 최소 뒤집기 횟수를 구한다.
난이도

보통10점 중 6점

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

문제

NN개의 노드를 가진 루트가 11인 트리가 있다. 트리의 각 노드에 앞면과 뒷면에 모두 수가 쓰여있는 카드가 놓여있다.

송이는 이 트리에 다음과 같은 행동을 원하는 만큼 할 수 있다.

  • 트리의 노드를 하나 선택한다.
  • 선택한 노드를 루트로 하는 서브 트리의 카드들을 선택한 노드를 포함해 모두 뒤집는다.

송이는 카드의 앞면에 적힌 NN개의 수의 합을 최대화하려고 한다.

이때 앞면에 적힌 NN개의 수의 합의 최댓값과 뒤집는 행동을 최소 몇 번 해야 하는지 구해보자.

입력

첫째 줄에 노드의 개수 NN이 주어진다. (2≤N≤100,000)(2 \leq N \leq 100\\,000)

둘째 줄에 노드 ii에 놓인 카드의 앞면에 적힌 수 F_iF\_i가 공백으로 구분되어 주어진다. (1≤i≤N;−1,000≤F_i≤1,000)(1 \leq i \leq N; -1\\,000 \leq F\_i \leq 1\\,000)

셋째 줄에 노드 ii에 놓인 카드의 뒷면에 적힌 수 B_iB\_i가 공백으로 구분되어 주어진다. (1≤i≤N;−1,000≤B_i≤1,000)(1 \leq i \leq N; -1\\,000 \leq B\_i \leq 1\\,000)

넷째 줄부터 N−1N - 1줄에 걸쳐 트리 간선의 양 끝점 u,vu, v가 공백으로 구분되어 주어진다. (1≤u,v≤N(1 \leq u, v \leq N; u≠v)u \ne v)

입력으로 주어지는 수는 모두 정수이다.

출력

앞면의 합의 최댓값과 뒤집어야 하는 최소 횟수를 공백으로 구분하여 출력한다.

예제2

  1. 예제 1

    입력
    3
    1 2 3
    6 5 4
    1 2
    2 3
    
    예상 출력
    15 1
    
  2. 예제 2

    입력
    3
    6 2 3
    1 5 4
    1 3
    1 2
    
    예상 출력
    15 2