151612025-02-14 11:52:28BencuTevefarmcpp17Elfogadva 50/5054ms7456 KiB
#include <bits/stdc++.h>


using namespace std;
#define int long long
int L[100001],n,m,ma,M[100001],Ma[100001];
struct Bencu {
    vector<int>fiuk;
    int s=0;
}a[100001];
int maxi (int x) {
    if (a[x].s==0) Ma[x]=L[x];
    else {
    int p=0;
    for (int i=0; i<a[x].s; i++) {
        p=p+maxi(a[x].fiuk[i]);
    }
    if (L[x]>p) Ma[x]=L[x];
    else Ma[x]=p;
    }
    return Ma[x];
}
void be(int x) {
    if (L[x]==Ma[x]) {
        ma++;
        M[ma]=x;
    }
    else {
        for (int i=0; i<a[x].s; i++) be(a[x].fiuk[i]);
    }
}

signed main()
{
    //ifstream f("be.in");
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin>>n;
    for (int i=1; i<=n; i++) cin>>L[i];
    for (int i=2; i<=n; i++) {
        int x;
        cin>>x;
        a[x].s++;
        a[x].fiuk.push_back(i);
    }
    cout<<maxi(1)<<endl;
    /*for (int i=1; i<=n; i++) {
        cout<<i<<": "<<Ma[i];
        //for (int j=0; j<a[i].s; j++) cout<<a[i].fiuk[j]<<"-"<<maxi(a[i].fiuk[j])<<"  ";
        cout<<endl;
    }*/
    be(1);
    cout<<ma<<endl;
    for (int i=1; i<=ma; i++) cout<<M[i]<<" ";
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/04ms3380 KiB
2Elfogadva0/04ms3380 KiB
3Elfogadva4/44ms3380 KiB
4Elfogadva4/43ms3384 KiB
5Elfogadva4/44ms3380 KiB
6Elfogadva4/44ms3380 KiB
7Elfogadva4/427ms5396 KiB
8Elfogadva6/628ms5896 KiB
9Elfogadva6/632ms6408 KiB
10Elfogadva6/643ms6724 KiB
11Elfogadva6/646ms7220 KiB
12Elfogadva6/654ms7456 KiB