#include<bits/stdc++.h> using namespace std; int p[102]; int t[102]; int main(){ int n,m;cin>>n>>m; bool flag=true; for(int i=1;i<=m;i++){ scanf("%d",&p[i]); } for(int i=1;i<=m;i++){ scanf("%d",&t[i]); } for(int i=1;i<=m;i++){//最早开始时间 int pre=p[i]; if(pre==0){ printf("%d ",1); }else{ int tot=1; while(pre!=0){ tot+=t[pre]; pre=p[pre]; } printf("%d ",tot); } } cout<<"\n"; for(int i=m-1;i>=1;i--){//最晚开始时间 int mx=0; for(int j=m;j>=i+1;j--){ int pre=p[j]; //相当于i<-j把j所需要的时间加到i上 //但是要考虑当i和k都->j if(pre==i){//找出所有前序为i的 mx=max(t[j]+t[pre],mx); } } t[i]=max(t[i],mx); if(mx>n){flag=false;break;} } if(flag){ for(int i=1;i<=m;i++){ cout<<n-t[i]+1<<" "; } } }
标签:pre,csp202212,int,max,flag,mx From: https://www.cnblogs.com/yds0823/p/17154476.html