238762026-01-31 11:33:36sarminTevefarmcpp17Elfogadva 50/5052ms7004 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
// const ll MOD = 1e9+7;

#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define int long long

vector<vector<int>> g;
vector<int> vis;
vector<int> t;

int dfs(int cur) {
	for (int i : g[cur]) {
		vis[cur] += dfs(i);
	}
	vis[cur] = max(vis[cur], t[cur]);
	return vis[cur];
}

void add(vector<int>& res, int cur) {
	if (t[cur] == vis[cur]) {
		res.push_back(cur);
	} else {
		for (int i : g[cur]) add(res, i);
	}
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n; cin >> n;
    t.resize(n);
    for (int i = 0; i < n; i++) cin >> t[i];
    g.resize(n); vis.resize(n, 0);
    int c;
    for (int i = 1; i <= n-1; i++) {
    	cin >> c; c--;
    	g[c].push_back(i);
    }
    
    /*for (auto i : g) {
    	for (auto j : i) {
    		cout << j << " ";
    	}
    	cout << "\n";
    }*/
    
    cout << dfs(0) << "\n";
    vector<int> res;
    add(res, 0);
    cout << res.size() << "\n";
    for (int i : res) cout << i+1 << " ";

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/01ms508 KiB
3Elfogadva4/41ms316 KiB
4Elfogadva4/41ms316 KiB
5Elfogadva4/41ms316 KiB
6Elfogadva4/41ms484 KiB
7Elfogadva4/423ms3760 KiB
8Elfogadva6/629ms4244 KiB
9Elfogadva6/635ms5124 KiB
10Elfogadva6/643ms5700 KiB
11Elfogadva6/652ms6316 KiB
12Elfogadva6/648ms7004 KiB