ccfcsp 202212-2 java题解

108 阅读1分钟
package com.itlxf;

import java.util.Scanner;
import java.lang.Math;

public class Main {

    public static void main(String[] args) {
   // write your code here
        Scanner scanner = new Scanner(System.in);
        int days = scanner.nextInt();
        int numbers = scanner.nextInt();
        int[] relys = new int[numbers+1];
        int[] day = new int[numbers+1];

        int[] beginday = new int[numbers+1];
        int[] lastday = new int[numbers+1];

        //用于判断是否能完成训练
        int canover=0;
        for(int i=1;i<=numbers;i++){
            relys[i]=scanner.nextInt();
        }
        for(int i=1;i<=numbers;i++){
            day[i]=scanner.nextInt();
        }
        //初始化
        for(int i=1;i<=numbers;i++){
            beginday[i]=1;
            lastday[i]=days-day[i]+1;
        }

        //有依赖,则最早开始日期为被依赖项目的开始日期加上依赖项目的训练时长
        for(int i=1;i<=numbers;i++){
            if(relys[i]!=0){
                beginday[i]=beginday[relys[i]]+day[relys[i]];
            }
        }
        //有依赖,则被依赖项目的最迟开始日期为当前项目的最迟开始日期减去依赖项目的训练时长
        for(int i=numbers;i>=1;i--){
            if(relys[i]!=0){
                //进行判断,可能遇到多个项目同时依赖同一个项目的情况,此时被依赖项目的最迟开始日期取最早的值
                if(lastday[relys[i]]>lastday[i]-day[relys[i]]){
                    lastday[relys[i]]=lastday[i]-day[relys[i]];
                }
            }
            if(lastday[i]<=0){
                canover=1;
                break;
            }
        }

        if(canover==0){
            for(int i=1;i<=numbers;i++){
                System.out.print(beginday[i]+" ");
            }
            System.out.println();
            for(int i=1;i<=numbers;i++){
                System.out.print(lastday[i]+" ");
            }
        }else if(canover==1){
            for(int i=1;i<=numbers;i++){
                System.out.print(beginday[i]+" ");
            }
        }

    }
}