写的头昏脑花的,自己写了几个案例都过了,但不知道错哪了,求教。
#include <bits/stdc++.h> using namespace std; struct NODE { int cnt_son; int son[2005]; int father; long long int energy; } parent[200005]; int main() { int n, sum1 = 0, maxi = 1, f = 0, a, b[100005] = {0}; long long int res=0; cin >> n; for (int i = 0; i < n - 1; i++) { cin >> a; parent[i + 2].father = a; parent[a].cnt_son++; parent[a].son[parent[a].cnt_son] = i + 2; } for (int i = 0; i < n; i++) { cin >> b[i]; sum1 += b[i]; } sort(b, b + n); for (int i = 1; i <= n; i++) { if (parent[maxi].cnt_son < parent[i].cnt_son) maxi = i; } for (int k = parent[maxi].cnt_son; k >= 0 ; k--) { for (int i = 1; i <= n; i++) { if (parent[i].cnt_son == k) { parent[i].energy = b[f]; f++; } } } for (int k = 0; k <= parent[maxi].cnt_son ; k++) { for (int i = 1; i <= n; i++) { if (parent[i].cnt_son == k) { parent[parent[i].father].energy += parent[i].energy; } } } for (int i = 1; i <= n; i++) { res+=parent[i].energy; } cout<<res; }
全部评论
(3) 回帖