240902026-02-04 09:48:01szabelrTevefarmcpp17Elfogadva 50/5056ms6584 KiB
#include <iostream>
#include <vector>

using namespace std;
void dfs(vector<long long> &tevek, vector<long long> &dp, vector<vector<long long>> &adj, int n){
    long long sum=0;
    for(auto x:adj[n])
    {
        dfs(tevek,dp,adj,x);
        sum+=dp[x];
    }
    if(sum>tevek[n])
        dp[n]=sum;
    else
        dp[n]=tevek[n];
}
void count(vector<long long> &tevek, vector<long long> &dp, vector<vector<long long>> &adj, int n,vector<int> &res)
{
    if(dp[n]==tevek[n])
    {
        res.push_back(n);
    }
    else
    {
        for(auto x:adj[n])
            count(tevek,dp,adj,x,res);
    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n;
    cin>>n;
    vector<long long> tevek(n+1);
    vector<long long> dp(n+1,-1);
    for(int i=1; i<=n; i++)
    {
        cin>>tevek[i];
    }
    vector<vector<long long>> adj(n+1);
    for(int i=2; i<=n; i++)
    {
        int x; cin>>x;
        adj[x].push_back(i);
    }
    dfs(tevek,dp,adj,1);
    cout<<dp[1]<<endl;
    vector<int> res;
    count(tevek,dp,adj,1,res);
    cout<<res.size()<<endl;
    for(auto x:res)
        cout<<x<<" ";
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/01ms316 KiB
3Elfogadva4/41ms316 KiB
4Elfogadva4/41ms316 KiB
5Elfogadva4/41ms316 KiB
6Elfogadva4/42ms316 KiB
7Elfogadva4/423ms3460 KiB
8Elfogadva6/628ms4116 KiB
9Elfogadva6/635ms4792 KiB
10Elfogadva6/635ms5500 KiB
11Elfogadva6/646ms6064 KiB
12Elfogadva6/656ms6584 KiB