151602025-02-14 11:51:07BencuTevefarmcpp17Elfogadva 50/50108ms7532 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");
    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/03ms3572 KiB
2Elfogadva0/04ms3380 KiB
3Elfogadva4/44ms3380 KiB
4Elfogadva4/44ms3380 KiB
5Elfogadva4/44ms3380 KiB
6Elfogadva4/44ms3408 KiB
7Elfogadva4/446ms5520 KiB
8Elfogadva6/654ms5940 KiB
9Elfogadva6/665ms6316 KiB
10Elfogadva6/676ms6816 KiB
11Elfogadva6/697ms7220 KiB
12Elfogadva6/6108ms7532 KiB