AcWing 4892. 训练计划
原题链接
简单
作者:
Firmament
,
2025-03-24 17:57:40
·重庆
,
所有人可见
,
阅读 2
#include <iostream>
#include <vector>
using namespace std;
const int M = 110;
int n, m;
struct Node {
int val;
int prev_num;
int prev_day;
int next_day;
Node() : val{0}, prev_num{0}, prev_day{0}, next_day{0} {}
};
int main(int argc, char* argv[]) {
cin >> n >> m;
vector<Node> v(M);
for (int i = 1; i <= m; i++) {
cin >> v[i].prev_num;
}
for (int i = 1; i <= m; i++) {
cin >> v[i].val;
}
bool can_done{true};
for (int i = 1; i <= m; i++) {
int prev_n = v[i].prev_num;
if (prev_n != 0) {
v[i].prev_day += v[prev_n].val + v[prev_n].prev_day;
}
cout << v[i].prev_day + 1 << " ";
if (v[i].prev_day + v[i].val > n) can_done = false;
}
if (can_done) {
cout << endl;
for (int i = m; i > 0; i--) {
int prev_n = v[i].prev_num;
if (prev_n) {
v[prev_n].next_day = max(v[prev_n].next_day, v[i].val + v[i].next_day);
}
}
for (int i = 1; i <= m; i++) {
cout << n - v[i].val - v[i].next_day + 1 << " ";
}
}
cout << endl;
return 0;
}