4296 2023. 03. 22 13:50:52 horvathabel Tevefarm cpp17 Elfogadva 50/50 112ms 18984 KiB
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
vector<ll> g[100001]; 
vector<ll> c(100001);
pair<ll, ll> megero[100001];
vector<ll> penz(100001);
ll dfs(int x){
	if (c[x]==0){
		megero[x]={penz[x],-1};
		return (penz[x]);
	}
	else{
		ll ans=0; 
		for (int edge:g[x]){
			ans+=dfs(edge);
		}
		megero[x]={penz[x],ans};
	}
	return (max(megero[x].first, megero[x].second));
}
vector<int> ans; 
void dfskereso(int x){
	for (int edge:g[x]){
		if (megero[edge].first>megero[edge].second){
			ans.push_back(edge); 
		}
		else{
			dfskereso(edge);
		}
	}
}
int main() {
	int n;
	cin>>n;
	for (int i=1; i<=n;i++){
		cin>>penz[i];
	}
	for (int i=2; i<=n;i++){
		ll x;
		cin>>x;
		c[x]++; 
		g[x].push_back(i);
	}
	dfs(1);
	cout<<max(megero[1].first, megero[1].second)<<endl; 
	if (megero[1].first<megero[1].second) dfskereso(1); 
	else{
		ans={1};
	}
	sort(ans.begin(), ans.end());
	cout<<ans.size()<<endl; 
	
	for (auto x: ans) cout<<x<<" ";
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 50/50
1 Elfogadva 0/0 4ms 9408 KiB
2 Elfogadva 0/0 6ms 9676 KiB
3 Elfogadva 4/4 6ms 9892 KiB
4 Elfogadva 4/4 6ms 10100 KiB
5 Elfogadva 4/4 4ms 10316 KiB
6 Elfogadva 4/4 7ms 10528 KiB
7 Elfogadva 4/4 50ms 14768 KiB
8 Elfogadva 6/6 57ms 15704 KiB
9 Elfogadva 6/6 67ms 16968 KiB
10 Elfogadva 6/6 74ms 17760 KiB
11 Elfogadva 6/6 101ms 18392 KiB
12 Elfogadva 6/6 112ms 18984 KiB