// O(n log^2 n) #include using namespace std; multiset> f(int v, const vector>& adj, const vector& B, const vector& V) { multiset> res = { {V[v], v} }; vector>> ms; for(int u : adj[v]) { ms.push_back(f(u, adj, B, V)); if(ms.back().size() > res.size()) res.swap(ms.back()); } for(int i=0;i B[v]) res.erase(res.begin()); return res; } int main() { int n; cin >> n; vector> adj(n); for(int i=1;i> p; --p; // ADDED BY ZAC TO ACCOMMODATE THE 0-BASED INDEXING SHIFT adj[p].push_back(i); } vector B(n), V(n); for(int& x : B) cin >> x; for(int& x : V) cin >> x; multiset> ans = f(0, adj, B, V); int64_t sum = 0; for(auto [x, y] : ans) sum += x; vector cities; for(auto [x, y] : ans) cities.push_back(y); sort(cities.begin(), cities.end()); cout << sum << endl; cout << cities.size(); for(int i=0;i