DFS Order
문제
Bessie has a simple undirected graph with vertices labeled (). She generates a depth-first search (DFS) order of the graph by calling the function dfs(), defined by the following C++ code. Each adjacency list (adj[] for all ) may be permuted arbitrarily before starting the depth first search, so a graph can have multiple possible DFS orders.
vector<bool> vis(N + 1);
vector<vector<int>> adj(N + 1); // adjacency list
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);
}
You are given the initial state of the graph as well as the cost to change the state of each edge. Specifically, for every pair of vertices satisfying , you are given an integer () such that
- If , edge is not currently in the graph, and can be added for cost .
- If , edge is currently in the graph, and can be removed for cost .
Determine the minimum total cost to change the graph so that is a possible DFS ordering.
입력
The first line contains .
Then lines follow. The th line contains separated by spaces.
출력
The minimum cost to change the graph so that is a possible DFS ordering.
예제
예제 1
4 1 2 3 40 6 11
10
예제 2
5 -1 10 -2 10 -7 10 -6 -4 -5 10
5
예제 3
4 -1 -2 300 4 -5 6
9