Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- vector <int> g[100010];
- int node[100010];
- int dfs(int u, int p){
- node[u] = 1;
- for(auto v: g[u]){
- if(v != p){
- node[u] += dfs(v, u);
- }
- }
- return node[u];
- }
- int countHighestScoreNodes(vector<int>& parents){
- int n = parents.size();
- for(int u=1;u<=n-1;u++){
- int v = parents[u];
- g[parents[u]].push_back(u);
- }
- dfs(0, -1);
- long long mx = 0;
- int cnt = 0;
- for(int u=0;u<=n-1;u++){
- long long cost = max(1, n - node[u]);
- for(auto v: g[u])
- cost = (long long)((long long) cost * (long long) node[v]);
- if(cost > mx) mx = cost, cnt = 1;
- else if(cost == mx) cnt ++;
- }
- return cnt;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement