9378 2024. 02. 21 11:22:46 szil Tevefarm cpp17 Elfogadva 50/50 48ms 13624 KiB
#include <bits/stdc++.h>

using ll = long long;
using namespace std;

const int MAXN = 100'001;

ll a[MAXN];
bool mark[MAXN];
vector<int> g[MAXN];
vector<int> ans;

ll dfs(int u, int p = -1) {
    ll res = 0;
    for (int v : g[u]) {
        res += dfs(v, u);
    }
    if (a[u] > res) mark[u] = 1;
    return max(res, a[u]);
}

void dfs2(int u) {
    if (mark[u]) ans.emplace_back(u);
    else for (int v : g[u]) dfs2(v);
}

void solve() {
    int n; cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    for (int i = 2; i <= n; i++) {
        int p; cin >> p;
        g[p].emplace_back(i);
    }
    cout << dfs(1) << "\n";
    dfs2(1);
    cout << ans.size() << "\n";
    for (int i : ans) cout << i << " ";
    cout << "\n";
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    int t = 1;
    // cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 50/50
1 Elfogadva 0/0 4ms 6676 KiB
2 Elfogadva 0/0 4ms 7008 KiB
3 Elfogadva 4/4 4ms 6948 KiB
4 Elfogadva 4/4 4ms 6928 KiB
5 Elfogadva 4/4 4ms 6940 KiB
6 Elfogadva 4/4 4ms 7360 KiB
7 Elfogadva 4/4 24ms 10168 KiB
8 Elfogadva 6/6 28ms 10992 KiB
9 Elfogadva 6/6 32ms 11836 KiB
10 Elfogadva 6/6 35ms 12556 KiB
11 Elfogadva 6/6 43ms 13016 KiB
12 Elfogadva 6/6 48ms 13624 KiB