151402025-02-13 16:38:43horkaTevefarmcpp17Elfogadva 50/50109ms8936 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int c=1e5+10;
bool vis[c],be[c];
int v[c],dp[c];
vector<int> adj[c];
void dfs(int cs)
{
    vis[cs]=1;
    int ossz=0;
    for(int &i:adj[cs])
        if(!vis[i])
    {
        dfs(i);
        ossz+=dp[i];
    }
    if(ossz<v[cs])
    {
        dp[cs]=v[cs];
        be[cs]=1;
    }
    else dp[cs]=ossz;
}
vector<int> ans;
int sum;
void dfs2(int cs)
{
    vis[cs]=1;
    if(be[cs])
    {
        sum+=v[cs];
        ans.push_back(cs);
        return;
    }
    for(int &i:adj[cs])
        if(!vis[i]) dfs2(i);
}
signed main()
{
    int n; cin>>n;
    for(int i=1; i<=n; i++)
        cin>>v[i];
    for(int i=2; i<=n; i++)
    {
        int x; cin>>x;
        adj[x].push_back(i);
        adj[i].push_back(x);
    }
    dfs(1);
    for(int i=1; i<=n; i++)
        vis[i]=0;
    dfs2(1);
    cout<<sum<<"\n"<<ans.size()<<"\n";
    for(int &i:ans)
        cout<<i<<" ";
    cout<<"\n";
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/03ms2640 KiB
2Elfogadva0/04ms2808 KiB
3Elfogadva4/43ms2612 KiB
4Elfogadva4/43ms2612 KiB
5Elfogadva4/43ms2568 KiB
6Elfogadva4/43ms2612 KiB
7Elfogadva4/448ms5904 KiB
8Elfogadva6/657ms6580 KiB
9Elfogadva6/668ms7152 KiB
10Elfogadva6/679ms7612 KiB
11Elfogadva6/6101ms8368 KiB
12Elfogadva6/6109ms8936 KiB