解题报告;
直接dp。注意mx也得longlong
AC代码:
class Solution {
public:
vector<int> vv[200005];
int sum[200005];
long long ans[200005];
int n;
void dfs(int x) {
ans[x] = 1; sum[x] = 1;
for(int i = 0; i<vv[x].size(); i++) {
dfs(vv[x][i]);
sum[x] += sum[vv[x][i]];
ans[x] *= sum[vv[x][i]];
}
if(n-sum[x] > 0) ans[x] *= (n-sum[x]);
}
int countHighestScoreNodes(vector<int>& parents) {
n = parents.size();
for(int i = 1; i<n; i++) {
vv[parents[i]].push_back(i);
}
dfs(0);
long long mx = 0;
int cnt = 0;
for(int i = 0; i<=n; i++) {
if(ans[i] > mx) {
cnt = 1;mx = ans[i];
} else if(ans[i] == mx) {
cnt ++;
}
}
return cnt;
}
};