149882025-02-10 19:53:07mateTevefarmcpp17Hibás válasz 21/50130ms8244 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/41ms316 KiB
6Részben helyes2/42ms316 KiB
7Részben helyes2/452ms4320 KiB
8Részben helyes3/664ms4980 KiB
9Részben helyes3/675ms5904 KiB
10Részben helyes3/693ms6708 KiB
11Hibás válasz0/6115ms7480 KiB
12Hibás válasz0/6130ms8244 KiB