
根树拓扑序最小逆序值(Rooted Tree Topological Order with Minimum Inversions)
题目描述
给定:
- 一棵含 N 个顶点的有根树,根为顶点 0;
- N 个整数 c0,c1,…,cN−1;
- N 个整数 d0,d1,…,dN−1。
对于顶点 i(i≥1),其父节点为 pi,且保证 0≤pi<i。
求一个排列 p=(p0,p1,…,pN−1),它是 {0,1,…,N−1} 的一个重排,并满足:
- 若 i=j 且顶点 pi 是顶点 pj 的祖先,则 i<j。
在所有满足上述条件的排列中,使下式最小化:
$$X = \sum_{i=0}^{N-1} \sum_{j=0}^{i-1} c_{p_i} \cdot d_{p_j}$$
输出最小值 X,以及任意一个达到该最小值的排列 p。
约束条件
- 1≤N≤2×105
- 对于 i=1,2,…,N−1,有 0≤pi<i
- 0≤ci,di≤109
- ∑i=0N−1ci≤109
- ∑i=0N−1di≤109
输入格式
N
p_1 p_2 ... p_{N-1}
c_0 c_1 ... c_{N-1}
d_0 d_1 ... d_{N-1}
输出格式
X
p_0 p_1 ... p_{N-1}
其中:
- X 为最小化的值,
- p0,p1,…,pN−1 为达到 X 的一个合法拓扑序。
10
0 0 0 1 2 2 4 7 8
41 10 46 7 30 4 30 12 48 32
47 38 25 31 37 48 16 17 34 13
29047
0 2 6 1 4 7 8 9 3 5
5
0 0 1 2
1 100000000 1 1 100000000
1 1 100000000 100000000 1
10000000400000005
0 1 2 4 3