문제
Bessie has a simple undirected graph with vertices labeled (). She generates a depth-first search (DFS) order of the graph by calling the function , defined by the following C++ code. Each adjacency list ( for all ) may be permuted arbitrarily before starting the depth first search, so a graph can have multiple possible DFS orders.
vector vis(N + 1); vector<vector> adj(N + 1); // adjacency list vector 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
예제 출력 1
10
예제 입력 2
5
-1
10 -2
10 -7 10
-6 -4 -5 10
예제 출력 2
5
예제 입력 3
4
-1
-2 300
4 -5 6
예제 출력 3
9
점수
Inputs 4-9: All Inputs 10-16: Inputs 17-23: No additional constraints.
코드를 제출하려면 로그인이 필요합니다.
로그인