题解:
#include<bits/stdc++.h>
using namespace std;
const int N = 365;
int n,m;
int deps[N];
int days[N];
int minStart[N];
int maxStart[N];
int main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>deps[i];
}
for(int i=1;i<=m;i++)
{
cin>>days[i];
}
//计算最早开始时间
for(int i=1;i<=m;i++)
{
if(deps[i]==0) minStart[i]=1;
else
{
minStart[i]=minStart[deps[i]]+days[deps[i]];
}
}
//计算最晚开始时间,从后往前开始
for(int i=m;i>0;i--)
{
//如果最晚时间还没改变认识0的话,将其初始化为n-days[i]+1;
if(maxStart[i]==0) maxStart[i]=n-days[i]+1;
//如果有依赖
if(deps[i]!=0)
{
//判断其依赖是否更新过
if(maxStart[deps[i]]!=0)
{
maxStart[deps[i]]=min(maxStart[deps[i]],maxStart[i]-days[deps[i]]);
}
else{
maxStart[deps[i]]=maxStart[i]-days[deps[i]];
}
}
}
bool flag = true;
for(int i=1;i<=m;i++)
{
if(maxStart[i]<=0){
flag = false;
}
}
for(int i=1;i<=m;i++)
{
cout<<minStart[i]<<" ";
}
cout<<endl;
if(!flag)
{
return 0;
}
else
{
for(int i=1;i<=m;i++)
{
cout<<maxStart[i]<<" ";
}
}
return 0;
}
其中样例2的测试用例,在自己的电脑上测试结果为:

但是仍能满分通过,可能是一个bug

这是一个C++程序,用于解决关于任务依赖和最早/最晚开始时间的问题。代码首先读取任务数量和依赖关系,然后计算每个任务的最早开始时间和最晚开始时间,以确保所有任务能在限定时间内完成。如果存在无法满足的时间约束,程序会返回错误标志。

966

被折叠的 条评论
为什么被折叠?



