P11676 [USACO25JAN] DFS Order P

Description

Bessie has a simple undirected graph with vertices labeled $1\dots N$ ($2\le N\le 750$). She generates a depth-first search (DFS) order of the graph by calling the function $\texttt{dfs}(1)$, defined by the following C++ code. Each adjacency list ($\texttt{adj}[i]$ for all $1\le i\le N$) may be permuted arbitrarily before starting the depth first search, so a graph can have multiple possible DFS orders. ```cpp vector vis(N + 1); 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 $(i,j)$ satisfying $1\le i

Input Format

The first line contains $N$. Then $N-1$ lines follow. The $j-1$th line contains $a_{1,j}, a_{2,j}, \dots, a_{j-1,j}$ separated by spaces.

Output Format

The minimum cost to change the graph so that $[1,2,\dots, N]$ is a possible DFS ordering.

Explanation/Hint

##### For Sample 1: Initially, the graph contains no edges. $(1,2),(2,3),(2,4)$ can be added for a total cost of $1+3+6$. The graph now has two possible DFS orderings: $[1,2,3,4],[1,2,4,3]$. ##### For Sample 2: Initially, the graph contains edges $(1,2),(2,3),(2,4),(1,5),(2,5),(3,5)$. Edge $(3,5)$ can be removed for a cost of $5$. ##### For Sample 3: Initially, the graph contains edges $(1,2),(1,3),(2,4)$. Edge $(2,4)$ can be removed and edge $(1,4)$ can be added for a total cost of $5+4=9$. #### SCORING: - Inputs 4-9: All $a_{i,j}>0$ - Inputs 10-16: $N\le 50$ - Inputs 17-23: No additional constraints.