149892025-02-10 19:54:11mateTevefarmcpp17Hibás válasz 21/50129ms6740 KiB
#include <bits/stdc++.h>
#include <vector>
using namespace std;

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

int dfs(int p){
    int 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(int x : ans)    cout << x << ' ';
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base21/50
1Elfogadva0/01ms316 KiB
2Hibás válasz0/02ms316 KiB
3Részben helyes2/41ms316 KiB
4Részben helyes2/41ms316 KiB
5Elfogadva4/42ms616 KiB
6Részben helyes2/42ms316 KiB
7Részben helyes2/450ms3892 KiB
8Részben helyes3/661ms4520 KiB
9Részben helyes3/672ms5244 KiB
10Részben helyes3/686ms5932 KiB
11Hibás válasz0/6115ms6212 KiB
12Hibás válasz0/6129ms6740 KiB