149982025-02-10 20:51:48mateTevefarmcpp17Elfogadva 50/50108ms6032 KiB
#include <bits/stdc++.h>
#include <vector>
using namespace std;

#define ll long long

vector<vector <ll>> graf;
vector <ll> sulyok;
vector <bool> ans;
vector <ll> out;

ll dfs(int p){
    ll sum = 0;
    for(int x : graf[p]){
        sum += dfs(x);
    }
    if(sulyok[p] >= sum){
        ans[p] = 1;
    }else{
        ans[p] = 0;
    }
    return max(sum,sulyok[p]);
}

void dfs2(int p){
    if(ans[p]){
        out.push_back(p);
        return;
    }
    for(ll x : graf[p]){
        dfs2(x);
    }
}


int main() {
	int n,a; cin >> n;
    graf.resize(n+1);
    sulyok.resize(n+1);
    ans.resize(n+1,0);
    for(int i = 1; i <= n; i++) cin >> sulyok[i];
    for(int i = 2; i <= n; i++){
        cin >> a;
        graf[a].push_back(i);
    }
    cout << dfs(1) << '\n';
    dfs2(1);
    cout << out.size() << '\n';
    for(ll x : out)    cout << x << ' ';
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms508 KiB
2Elfogadva0/02ms512 KiB
3Elfogadva4/41ms316 KiB
4Elfogadva4/41ms316 KiB
5Elfogadva4/41ms376 KiB
6Elfogadva4/42ms440 KiB
7Elfogadva4/445ms3284 KiB
8Elfogadva6/652ms3708 KiB
9Elfogadva6/661ms4492 KiB
10Elfogadva6/674ms4944 KiB
11Elfogadva6/694ms5552 KiB
12Elfogadva6/6108ms6032 KiB