149902025-02-10 19:57:35mateTevefarmcpp17Hibás válasz 27/50131ms7988 KiB
#include <bits/stdc++.h>
#include <vector>
using namespace std;

#define ll long long

vector<vector <ll>> graf;
vector <ll> sulyok;
set <ll> ans;

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

int main() {
	int n,a; cin >> n;
    graf.resize(n+1);
    sulyok.resize(n+1);
    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';
    cout << ans.size() << '\n';
    for(ll x : ans)    cout << x << ' ';
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base27/50
1Elfogadva0/01ms316 KiB
2Hibás válasz0/02ms316 KiB
3Részben helyes2/41ms316 KiB
4Részben helyes2/41ms316 KiB
5Elfogadva4/41ms316 KiB
6Részben helyes2/42ms316 KiB
7Részben helyes2/454ms4104 KiB
8Részben helyes3/665ms4860 KiB
9Részben helyes3/679ms5684 KiB
10Részben helyes3/693ms6472 KiB
11Részben helyes3/6116ms7072 KiB
12Részben helyes3/6131ms7988 KiB