만드는 중입니다

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

DFS 순서

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

요약
각 간선을 추가하거나 제거하는 비용이 주어질 때, 1부터 N까지의 번호가 정점 1에서 시작하는 유효한 DFS 순서가 되도록 하는 최소 비용을 구합니다.
난이도

보통10점 중 7점

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

문제

벤시는 정점에 11부터 NN까지 번호가 붙은 단순 무방향 그래프를 가지고 있다 (2≤N≤7502 \le N \le 750). 벤시는 아래 코드의 dfs(1)을 호출해 그래프의 DFS 순서를 만든다. 각 인접 리스트 adj[i] (1≤i≤N1 \le i \le N)는 탐색을 시작하기 전에 임의로 순서를 바꿀 수 있으므로, 같은 그래프라도 가능한 DFS 순서가 여러 개일 수 있다.

vector<bool> vis(N + 1);
vector<vector<int>> adj(N + 1);  // 인접 리스트
vector<int> dfs_order;

void dfs(int x) {
    if (vis[x]) return;
    vis[x] = true;
    dfs_order.push_back(x);
    for (int y : adj[x]) dfs(y);
}

1≤i<j≤N1 \le i < j \le N을 만족하는 정점 쌍 (i,j)(i,j)마다 정수 ai,ja_{i,j} (0<∣ai,j∣≤10000 < |a_{i,j}| \le 1000)가 주어진다.

  • ai,j>0a_{i,j} > 0이면 간선 (i,j)(i,j)는 현재 그래프에 없으며, 비용 ai,ja_{i,j}를 내고 추가할 수 있다.
  • ai,j<0a_{i,j} < 0이면 간선 (i,j)(i,j)는 현재 그래프에 있으며, 비용 −ai,j-a_{i,j}를 내고 제거할 수 있다.

[1,2,…,N][1, 2, \dots, N]이 가능한 DFS 순서가 되도록 그래프를 바꾸는 데 드는 최소 비용을 구하라.

입력

첫째 줄에 NN이 주어진다. 이어서 N−1N-1개의 줄이 주어지며, (j−1)(j-1)번째 줄에는 a1,j,a2,j,…,aj−1,ja_{1,j}, a_{2,j}, \dots, a_{j-1,j}가 공백으로 구분되어 있다.

출력

[1,2,…,N][1, 2, \dots, N]이 가능한 DFS 순서가 되도록 그래프를 바꾸는 데 드는 최소 비용을 출력한다.

예제3

  1. 예제 1

    입력
    4
    1
    2 3
    40 6 11
    
    예상 출력
    10
    
  2. 예제 2

    입력
    5
    -1
    10 -2
    10 -7 10
    -6 -4 -5 10
    
    예상 출력
    5
    
  3. 예제 3

    입력
    4
    -1
    -2 300
    4 -5 6
    
    예상 출력
    9