#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> PII;
int n, m, a[105], b[105], c[105], d[105];
void find(int x, int y)
{
d[y] = max(d[y], d[x] + b[y]);
if (a[y] != 0)
find(y, a[y]);
}
void solve()
{
for (int i = 1; i <= m; i++)
c[i] = b[i] + c[a[i]];
bool flag = true;
for (int i = 1; i <= m; i++)
{
if (c[i] > n)
flag = false;
cout << c[i] - b[i] + 1 << " ";
}
cout << endl;
//求后缀数组
if (flag)
{
for (int i = m; i >= 1; i--)
{
if (a[i] != 0)
find(i, a[i]);
}
//cout << "计算已经完成" << endl;
for (int i = 1; i <= m; i++)
cout << n - d[i] + 1 << " ";
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= m; i++)
cin >> a[i];
for (int i = 1; i <= m; i++)
{
cin >> b[i];
d[i] = b[i];
}
solve();
return 0;
}
CSP 202212-2-训练计划
最新推荐文章于 2024-06-05 15:16:22 发布