题目描述:
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
Tokitsukaze 有 nnn 个节点的有根能量树,根为 111。最开始,树上每个节点的能量都是 000。
现在 Tokitsukaze 有 nnn 个能量球,第 iii 个能量球拥有 viv_ivi 能量。她想把这 nnn 个能量球分别放置在能量树的每个节点上,使能量树的每个节点都恰好有一个能量球。
Tokitsukaze 每次只能放置一个能量球,所以她将进行 nnn 次操作。每一次操作,她会选择一个能量球,再选择一个没有能量球的能量树节点 xxx,把刚刚选择的能量球放置在节点 xxx 上。在这之后,Tokitsukaze 能获得以 xxx 为根的子树中的所有能量球的能量 (包括节点 xxx 的能量球能量)。
在放置完所有能量球后,Tokitsukaze 可能获得的总能量最多是多少?
输入描述:
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] args) {
/*每个节点的父类节点加上自己就是使用的次数
进行排序使用次数最多的用最大的能量球
*/
Scanner in=new Scanner(System.in);
while(in.hasNext()) {
int a=in.nextInt();
long w[]=new long[a+1];//储存能量球
long sz[]=new long[a+1];//储存每个节点连自己有多少父节点和祖宗节点
sz[1]=1;//初始自己一个节点
for(int x=2;x<=a;x++) {
long b=in.nextInt();
sz[x]=sz[(int)b]+1;//算每个节点的父节点和祖宗节点个数
//例如2的父节点是1在加上自身为二
}
for(int x=1;x<=a;x++) {
w[x]=in.nextLong();
}
long sum=0;
Arrays.sort(sz,1,a+1);
Arrays.sort(w,1,a+1);
for(int x=1;x<=a;x++) {
sum+=sz[x]*w[x];
}
System.out.println(sum);
}
}
}