Submission #75814366


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

// https://github.com/skrewbar/cp-templates

using ll = long long;

#define all(v) (v).begin(), (v).end()
#define compress(v) \
    sort(all(v));   \
    v.erase(unique(all(v)), (v).end())
#define by(x) [](const auto& a, const auto& b) { return a.x < b.x; }
#define by_desc(x) [](const auto& a, const auto& b) { return a.x > b.x; }

template <typename T>
using MinHeap = priority_queue<T, vector<T>, greater<T>>;

template <typename T>
bool minimize(T& target, T candidate) {
    return target > candidate ? (target = candidate, true) : false;
}
template <typename T>
bool maximize(T& target, T candidate) {
    return target < candidate ? (target = candidate, true) : false;
}

int w[5050], p[5050];
vector<int> childs[5050];

int mem = 0;
void findLeafs(int cur) {
    if (childs[cur].empty()) {
        mem += w[cur];
        return;
    }

    for (int child : childs[cur]) {
        if (child == p[cur])
            continue;

        findLeafs(child);
    }
}

int answer = 0;

void calc(int cur) {
    if (childs[cur].empty())
        return;

    for (int child : childs[cur]) {
        if (child == p[cur])
            continue;

        calc(child);
    }

    mem += w[cur];
    maximize(answer, mem);
    for (int child : childs[cur]) {
        if (child == p[cur])
            continue;

        mem -= w[child];
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int N, M;
    cin >> N >> M;

    for (int i = 1; i <= N; i++)
        cin >> w[i];
    for (int i = 2; i <= N; i++) {
        cin >> p[i];
        childs[p[i]].push_back(i);
    }
    
    findLeafs(1);
    calc(1);

    if (answer > M)
        cout << "OOM";
    else
        cout << answer;

    return 0;
}

Submission Info

Submission Time
Task A - Mobilint Tensor Scheduling (REGULUS)
User skuru
Language C++23 (GCC 15.2.0)
Score 100
Code Size 1855 Byte
Status AC
Exec Time 9 ms
Memory 4024 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 100 / 100
Status AC
AC × 70
Set Name Test Cases
Sample
All 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70
Case Name Status Exec Time Memory
01 AC 9 ms 3420 KiB
02 AC 1 ms 3300 KiB
03 AC 1 ms 3420 KiB
04 AC 1 ms 3416 KiB
05 AC 1 ms 3484 KiB
06 AC 1 ms 3356 KiB
07 AC 1 ms 3360 KiB
08 AC 1 ms 3364 KiB
09 AC 1 ms 3320 KiB
10 AC 1 ms 3484 KiB
11 AC 1 ms 3416 KiB
12 AC 1 ms 3360 KiB
13 AC 1 ms 3420 KiB
14 AC 1 ms 3308 KiB
15 AC 1 ms 3340 KiB
16 AC 1 ms 3496 KiB
17 AC 1 ms 3360 KiB
18 AC 1 ms 3488 KiB
19 AC 1 ms 3416 KiB
20 AC 1 ms 3416 KiB
21 AC 1 ms 3420 KiB
22 AC 1 ms 3300 KiB
23 AC 1 ms 3416 KiB
24 AC 1 ms 3356 KiB
25 AC 1 ms 3340 KiB
26 AC 1 ms 3308 KiB
27 AC 1 ms 3420 KiB
28 AC 1 ms 3484 KiB
29 AC 1 ms 3488 KiB
30 AC 1 ms 3428 KiB
31 AC 1 ms 3340 KiB
32 AC 1 ms 3456 KiB
33 AC 1 ms 3560 KiB
34 AC 1 ms 3612 KiB
35 AC 1 ms 3544 KiB
36 AC 1 ms 3488 KiB
37 AC 1 ms 3624 KiB
38 AC 1 ms 3548 KiB
39 AC 1 ms 3448 KiB
40 AC 1 ms 3624 KiB
41 AC 1 ms 3612 KiB
42 AC 1 ms 3612 KiB
43 AC 1 ms 3484 KiB
44 AC 1 ms 3548 KiB
45 AC 1 ms 3488 KiB
46 AC 1 ms 3548 KiB
47 AC 1 ms 3560 KiB
48 AC 1 ms 3484 KiB
49 AC 1 ms 3564 KiB
50 AC 1 ms 3612 KiB
51 AC 1 ms 3528 KiB
52 AC 1 ms 3612 KiB
53 AC 1 ms 3564 KiB
54 AC 1 ms 3612 KiB
55 AC 1 ms 3548 KiB
56 AC 1 ms 3704 KiB
57 AC 2 ms 3688 KiB
58 AC 1 ms 3752 KiB
59 AC 2 ms 3932 KiB
60 AC 2 ms 3768 KiB
61 AC 2 ms 3872 KiB
62 AC 1 ms 3616 KiB
63 AC 2 ms 4024 KiB
64 AC 2 ms 3960 KiB
65 AC 2 ms 3948 KiB
66 AC 2 ms 3832 KiB
67 AC 2 ms 4000 KiB
68 AC 2 ms 3656 KiB
69 AC 1 ms 3564 KiB
70 AC 1 ms 3560 KiB