解题思路:从头遍历p[i],再从i-1往前循环到0,找到p[fu],如果p[fu]不为零,min+=t[fu]即天数增加前一科目天数,如果进入循环,要把最终fu的天数加上
import java.util.Scanner;
public class xljh {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] p = new int[m + 1];
int[] t = new int[m + 1];
for (int i = 1; i < m + 1; i++) {
p[i] = sc.nextInt();
}
for (int i = 1; i < m + 1; i++) {
t[i] = sc.nextInt();
}
for (int i = 1; i < m + 1; i++) {//选中一个pi
int fu = p[i];//定义fu往前找对应pi
int min = 1;//定义最小开始天数
boolean b1 = false;//b1代表是否有依赖科目,有则进入循环
for (int j = i - 1; j > 0; j--) {
b1 = true;
if (p[fu] != 0) {
min += t[fu];
fu = p[fu];
}else {
break;
}
}
if (b1) {
min += t[fu];
}
System.out.print(min + " ");
}
}
}