csp 训练计划 100满分解析

在这里插入图片描述

#include
using namespace std;
int n,m;
map<int, int> deps;
int days[101]={0};
int minStart[101]={0};
int maxStart[101]={0};
int main(){// 加速cin,coutios::sync_with_stdio(false);std::cin.tie(0);// 方便输入和调试代码// freopen("../io/input.txt", "r", stdin);cin>>n>>m;// 读取依赖关系for(int i=1; i<=m; i++){int d;cin>>d;deps[i]=d;}// 读取需要的时间for(int i=1; i<=m; i++){int d;cin>>d;days[i]=d;}// 计算最早开始时间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>=1; i--){// 当前节点没有更新过最晚时间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 can=true; // 输出最早开始时间for(int i=1; i<=m; i++){if(maxStart[i]<=0){can = false;}cout<<minStart[i];if(i!=m){cout<<" ";}}// 判断是否能够都完成if (!can){return 0;}cout<<endl;// 输出最晚开始时间for(int i=1; i<=m; i++){cout<<maxStart[i];if(i!=m){cout<<" ";}}return 0;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部