154262025-02-19 15:12:58999Tevefarmcpp17Elfogadva 50/50118ms7368 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;

#define int long long

const int inf=1e9;

vector<int> dp,vissza;

int power(int a,int b){
    if(b==0)return 1;
    return power(a,b-1)*a;
}

void operator+=(vector<int>& a, vector<int> b){
    for(int i = 0;i<b.size();i++){
        a.push_back(b[i]);
    }
}

vector<int> dfs(vector<vector<int>>& v, int node, vector<int>& ertek){
    dp[node]=ertek[node];
    int temp=0;
    vector<int> tt;
    for(int u:v[node]){
        tt+=dfs(v,u,ertek);
        temp+=dp[u];
    }
    if(dp[node]>temp){
        vissza.push_back(node);
        tt.clear();
        tt.push_back(node);
    }
    else{
        dp[node]=temp;
    }
    return tt;
}

signed main() {
    int n;cin>>n;
    vector<int> ertek(n);
    dp.resize(n);
    for(int i = 0; i<n;i++){
        cin>>ertek[i];
    }
    vector<vector<int>> v(n);
    for(int i = 1;i<n;i++){
        int a;cin>>a;
        v[--a].push_back(i);
    }
    vissza=dfs(v,0,ertek);
    cout<<dp[0]<<endl;
    cout<<vissza.size()<<endl;
    for(int i : vissza)cout<<i+1<<' ';
    cout<<endl;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/02ms316 KiB
3Elfogadva4/41ms316 KiB
4Elfogadva4/41ms316 KiB
5Elfogadva4/41ms316 KiB
6Elfogadva4/42ms316 KiB
7Elfogadva4/446ms3804 KiB
8Elfogadva6/657ms4532 KiB
9Elfogadva6/665ms5456 KiB
10Elfogadva6/678ms6264 KiB
11Elfogadva6/698ms6620 KiB
12Elfogadva6/6118ms7368 KiB