代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
int p[m+1];
int t[m+1];
int sum=0;
int early[m+1]={0};
int late[m+1];
fill(late,late+m+1,365);
int back[m+1]={0};
for(int i=1;i<=m;i++)
{
cin>>p[i];
if(p[i]!=0)
{
back[p[i]]=1;
}
}
for(int i=1;i<=m;i++)
{
cin>>t[i];
}
bool flag=true;
for(int i=1;i<=m;i++)
{
if(p[i]==0)
{
early[i]=1;
sum=t[i];
}
else
{
early[i]=early[p[i]]+t[p[i]];
sum=early[i]+t[i]-1;
}
if(sum>n)
{
flag=false;
}
sum=0;
}
for(int i=1;i<=m;i++)
{
cout<<early[i];
cout<<(i<m?" ":"\n");
}
if(flag==true)
{
for(int i=m;i>=1;i--)
{
if(back[i]==0)
{
late[i]=n-t[i]+1;
}
if(p[i])
{
late[p[i]]=min(late[p[i]],late[i]-t[p[i]]);
}
}
for(int i=1;i<=m;i++)
{
cout<<late[i];
cout<<(i<m?" ":"\n");
}
}
return 0;
}