結果
| 問題 |
No.3283 Labyrinth and Friends
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-09-26 22:28:05 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,002 bytes |
| コンパイル時間 | 1,971 ms |
| コンパイル使用メモリ | 207,376 KB |
| 実行使用メモリ | 34,816 KB |
| 最終ジャッジ日時 | 2025-09-26 22:28:10 |
| 合計ジャッジ時間 | 3,745 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 2 |
| other | AC * 1 WA * 44 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main () {
int N, X;
cin >> N >>X;
std::vector<int> P(N);
for (int i = 1; i < N; i ++) {
cin >> P[i];
P[i] --;
}
P[0] = -1;
vector<vector<int>> gr(N);
for (int i = 1; i < N; i ++) {
gr[P[i]].push_back(i);
}
vector<int> C(N, 0), S(N, 0);
for (int i = 1; i < N; i ++) {
cin >> C[i] >> S[i];
}
int ss = accumulate(S.begin(), S.end(), 0);
vector dp(N, vector(ss + 1, (ll)1e18));
vector siz(N, 0);
vector<ll> nxt;
for (int u = N-1; u >= 0; u --) {
dp[u][0] = 0;
for (int i = 1; i <= S[u]; i ++) dp[u][i] = C[u];
siz[u] = S[u] + 1;
nxt = dp[u];
for (int v : gr[u]) {
for (int i = S[u]; i < siz[u]; i ++) {
for (int j = S[v]; j < siz[v]; j ++) {
nxt[i + j] = min(nxt[i + j], dp[u][i] + dp[v][j]);
}
}
for (int i = siz[u] + siz[v] - 2; i >= 0; i --) {
nxt[i] = min(nxt[i], nxt[i+1]);
}
swap(dp[u], nxt);
siz[u] = siz[u] + siz[v] - 1;
}
}
cout << dp[0][X] << endl;
}