Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include<bits/stdc++.h>using namespace std;const int N(511111);int a[N], dep[N];long long val[N];vector<int> sons[N];priority_queue<int> mp[N];int main() {int n;scanf("%d%d", &n, &a[1]);for(int i(2); i <= n; i++) {scanf("%d", &a[i]);int x = i - 1;sons[x].push_back(i);dep[i] = dep[x] + 1;}for(int i(n); i >= 1; i--) {for(int j = 0; j < sons[i].size(); j ++) {int p = sons[i][j];if(mp[p].size() > mp[i].size())swap(mp[p], mp[i]);val[i] += val[p];while(!mp[p].empty()) {mp[i].push(mp[p].top());mp[p].pop();}}if(mp[i].empty()) {mp[i].push(a[i]);val[i] = 0;