这题有个小小的坑,就是虽然一个科目只依赖一门科目但是可以多门科目依赖一个科目
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner as=new Scanner(System.in);
int n=as.nextInt();//天数
int m=as.nextInt();//训练科目
int[] yl=new int[m+1];//依赖的科目
int[] hs=new int[m+1];//耗时
int[] zuiZao=new int[m+1];//最早开始时间
int[] zuiWan=new int[m+1];//最晚开始时间
boolean or=true;//默认可以参加
for(int i=1;i<yl.length;i++){//输入依赖
yl[i]=as.nextInt();
}
for(int i=1;i<hs.length;i++){//输入训练耗时
hs[i]=as.nextInt();
}
for (int i=1;i<yl.length;i++){//计算最早开始时间
zuiZao[i]=zuiZao[yl[i]]+hs[yl[i]];//1+依赖科目的最早开始时间+依赖科目的训练时间
if(zuiZao[i]==0) zuiZao[i]=1;
if (zuiZao[i] + hs[i] - 1> n) {//判断是否会超时
or = false;
// System.out.println(" 是否会超时="+zuiZao[i]+" 耗时"+hs[i]);
}
}
if (or) {//如果不会超时
for (int i = yl.length-1; i >= 1; i--) {
zuiWan[i] = n - hs[i] + 1;
for (int ii = yl.length-1; ii > i; ii--) {
if (yl[ii] == i) {
zuiWan[i] = Math.min(zuiWan[i], zuiWan[ii] - hs[i]);//无需+1 当天不算
}
}
}
}
for(int i=1;i<zuiZao.length;i++ ) { if(i<zuiZao.length-1){System.out.print(zuiZao[i]+" ");} else if(i==zuiZao.length-1){System.out.println(zuiZao[i]+" ");} }//输出最早那天训练
if (or==true){ for (int i=1;i<zuiWan.length;i++){ System.out.print(zuiWan[i]+" "); } }//输出最晚可以什么时候训练
}
}