#include<bits/stdc++.h>usingnamespace std;/*
csp 202212-2 训练计划
本题类似于数据结构中的AOE网活动的最早、最迟发生时间问题
*/constint SIZE =1e2+10;int rely[SIZE],//第i个任务依赖的任务
days[SIZE],//第i个任务训练时间
minDays[SIZE],//第i个任务最早开始时间
maxDays[SIZE];//第i个任务最晚开始时间
vector<int> relyed[SIZE];//依赖第i个任务的任务集合intmain(){int n, m, t;bool fail =false;
days[0]=0;
cin >> n >> m;for(int i =1; i <= m; i++){
cin >> rely[i];}for(int i =1; i <= m; i++){
cin >> days[i];}for(int i =1; i <= m; i++){if(rely[i]==0){
minDays[i]=1;}else{
t = rely[i];//依赖的任务
minDays[i]= minDays[t]//它依赖任务的最早开始时间+ days[t];//它依赖任务的最早完成时间//完成的后一天
relyed[t].push_back(i);//i依赖第t个任务}if(minDays[i]> n){//顿顿不能在n天内完成全部m项科目的训练
fail =true;}}for(int i = m; i >=1; i--){if(relyed[i].size()==0){
maxDays[i]= n - days[i]+1;}else{int temp = n;for(int j =0; j < relyed[i].size(); j++){//找到依赖该任务的任务的最晚开始时间中最早的那个
temp =min(temp, maxDays[relyed[i][j]]);}
maxDays[i]= temp - days[i];}if(maxDays[i]<=0){
fail =true;}}for(int i =1; i <= m; i++){
cout << minDays[i]<<" ";}if(fail){return0;}
cout << endl;for(int i =1; i <= m; i++){
cout << maxDays[i]<<" ";}return0;}