关键路径的变形题
代码如下:
#include<iostream>
using namespace std;
#include<vector>
#define N 101
int p[N];
int t[N];
int main(){
int n,m;
bool kk=true; //判断是否符合训练时间
cin>>m>>n;
int temp[N];//最早执行时间
int pre[N];//最迟执行时间
for(int i=1;i<=n;i++){
int a;
cin>>a;
p[i]=a;
}
for(int j=1;j<=n;j++){
int b;
cin>>b;
t[j]=b;
}
for(int i=1;i<=n;i++){
pre[i]=111;
}
for(int i=1;i<=n;i++){
pre[i]=m+1-t[i]; //先全部初始化最迟时间
if(p[i]==0){
temp[i]=1;
if(t[i]>m){
kk=false;
}
}
else{
temp[i]=t[p[i]]+temp[p[i]];
if(temp[i]+t[i]>m){
kk=false;
}
}
}
for(int i=n;i>0;i--){
if(p[i]!=0&&pre[p[i]]>pre[i]-t[p[i]]){
pre[p[i]]=pre[i]-t[p[i]];
}
}//被当作条件的天数重新计算最迟开始时间
if(!kk){
for(int i=1;i<=n;i++){
cout<<temp[i]<<" ";
}
}
else{
for(int i=1;i<=n;i++){
cout<<temp[i]<<" ";
}
cout<<endl;
for(int i=1;i<=n;i++){
cout<<pre[i]<<" ";
}
}
system("pause");
return 0;
}