题解1 70分
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt(); // 数组大小
int m = scanner.nextInt(); // 操作次数
int[] p = new int[105]; // 数组p,下标从1开始
int[] q = new int[105]; // 数组q,下标从1开始
// 读取数组p的值
for (int i = 1; i <= m; i++) {
p[i] = scanner.nextInt();
}
// 读取数组q的值
for (int i = 1; i <= m; i++) {
q[i] = scanner.nextInt();
}
// 根据题目描述,对数组q进行修改
for (int i = 1; i <= m; i++) {
if (p[i] == 0) {
System.out.print(1 + " "); // 如果p[i]为0,则输出1
} else {
System.out.print(q[p[i]] + 1 + " "); // 否则输出q[p[i]] + 1
q[i] += q[p[i]]; // 修改q[i]的值为原来的值加上q[p[i]]
}
}
scanner.close();
}
}
题解2
import java.util.Scanner;
public class Main {
public static void main(String[] args){
M();
}
// 定义M函数用于计算最早开始时间和最晚开始时间
public static int M(){
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]; // 训练天数
int[] ea = new int[m+1]; // 最早开始时间
int[] la = new int[m+1]; // 最晚开始时间
int min_latest; // 最晚开始时间的最小值
int key = 1; // 标记是否可以在规定天数内完成所有科目的训练,初始为1,表示可以完成
// 读取依赖科目的编号
for (int i = 1; i <= m; i++) {
p[i] = sc.nextInt();
}
// 读取训练天数
for (int i = 1; i <= m; i++) {
t[i] = sc.nextInt();
}
// 计算每个科目的最早开始时间
for (int i = 1; i <= m; i++) {
if (p[i] == 0){
ea[i] = 1; // 如果没有依赖,最早可以从第1天开始训练
}else {
ea[i] = ea[p[i]] + t[p[i]]; // 最早开始时间为依赖科目的结束时间加上依赖科目的训练天数
}
if ((ea[i] + t[i] - 1) > n){ // 如果最早开始时间加上本科目的训练天数大于总天数n
key = 0; // 则无法在规定天数内完成所有科目的训练,key置为0
}
}
// 计算每个科目的最晚开始时间
if(key == 1){ // 如果可以在规定天数内完成所有科目的训练
for (int i = m; i >=1 ; i--) {
min_latest = n - t[i] + 1; // 最晚开始时间的初始值为总天数n减去本科目的训练天数再加1
for (int j = m; j > i; j--) {
if (p[j] == i) { // 如果j依赖i
min_latest = Math.min(min_latest, la[j] - t[i]); // 则最晚开始时间为依赖i的最晚开始时间减去i的训练天数
}
}
la[i] = min_latest;
}
}
// 输出最早开始时间
for (int i = 1; i <= m; i++) {
System.out.print(ea[i] + " ");
}
System.out.println();
// 如果可以在规定天数内完成所有科目的训练,则输出最晚开始时间
if(key == 1){
for (int i = 1; i <= m; i++) {
System.out.print(la[i]+ " ");
}
}
return 0;
}
}