问题 5299 --森林的魔力

5299: 森林的魔力★★★★

时间限制: 2 Sec  内存限制: 256 MB
提交: 16  解决: 11
[提交][状态][命题人:]

题目描述

利用追踪术,游侠小明跟随黑山羊幼崽的召唤者,来到了一片森林。小明需要在森林中收集尽可能多的魔力。
森林可以表示为若干棵树。其中有 n 个节点,第 i 个节点的魔力值为 a[i] ,其父节点为 b[i] (若第 i 个节点为根节点,则 b[i]=-1)。
小明初始拥有魔力储备为 0 。小明可以通过以下操作增加或减少魔力值:
  1. 选择一个节点 i (1≤i≤n) ;
  2. 魔力储备增加 a[i] ;
  3. 如果 b[i]≠-1 ,则 a[b[i]] 增加 a[i] ;
每个节点恰好被操作一次,求魔力储备最大可以是多少,并给出对应的操作 i 的顺序。

输入

第一行包含一个整数 n (1≤n≤2⋅10^5) ,表示节点数。
第二行包含 n 个整数 a[1],a[2],...,a[n] (-10^6≤a[i]≤10^6) 。
第三行包含 n 个整数 b[1],b[2],...,b[n] (1≤b[i]≤n 或 b[i]=-1) 。
保证输入的数据为森林,即不构成环。

输出

第一行输出最大的魔力储备。
第二行输出 n 个不同的整数 p[1],p[2],...,p[n] (1≤p[i]≤n) ,表示操作序列。如果有多种方案,输出任意一种即可。
样例输入
Copy
样例1:
3
1 2 3
2 3 -1

样例2:
2
-1 100
2 -1

样例3:
10
-10 -1 2 2 5 -2 -3 -4 2 -6
-1 -1 2 2 -1 5 5 7 7 9
样例输出
Copy
样例1:
10
1 2 3

样例2:
99
2 1

样例3:
-9
3 5 6 1 9 4 10 7 8 2

提示

来源

[提交][状态]