#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
bool flag=1;
int p[m+1],t[m+1];
int fast[m+1],last[m+1];
for(int i=1;i<=m;i++)
{
cin>>p[i];
}
for(int i=1;i<=m;i++)
{
cin>>t[i];
last[i]=n+1-t[i];//初始化
}
for(int i=1;i<=m;i++)
{
if(p[i]==0)
{
fast[i]=1;
}
else{
fast[i]=fast[p[i]]+t[p[i]];//最早开始时间为依赖对象的最早开始时间+依赖对象所用的时间
}
if(fast[i]+t[i]-1>n)//如果最早开始时间加上所用时间大于规定时间,则无需计算最晚开始时间
{
flag=0;
}
}
if(flag==1)
{
for(int i=m;i>=1;i--)//计算最晚开始时间从最后往前算,因为前面的一个项目可能被多个项目依赖
{
if(p[i]!=0)//某个项目被依赖
{
if(last[i]-t[p[i]]<last[p[i]])//将被依赖项目赋值为初始值减去后面要依赖它项目的项目时间(若出现多次,在if里即可得出最小值)
{
last[p[i]]=last[i]-t[p[i]];
}
}
}
}
for(int i=1;i<=m;i++)
{
cout<<fast[i]<<" ";
}
cout<<endl;
for(int i=1;i<=m;i++)
{
if(flag)
{
cout<<last[i]<<" ";
}
}
return 0;
}
csp 202212-2训练计划
最新推荐文章于 2024-05-26 21:22:52 发布