Submission #1214508

#TimeUsernameProblemLanguageResultExecution timeMemory
1214508hyakup트리 (IOI24_tree)C++20
10 / 100
2095 ms28136 KiB
#include "tree.h"
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

int n;
vector<int> p, w;
vector<vector<int>> adj;

void init(vector<int> P, vector<int> W) {
  p = P;
  n = (int)p.size();
  w = W;
  adj.resize(n);
  for( int i = 1; i < n; i++ ){
    adj[p[i]].push_back(i);
  }
}

ll query(int l, int r) {
  vector<ll> c(n), sum(n);

  function<void(int)> dfs = [&]( int cur ){
    for( int viz : adj[cur] ){
      dfs( viz );
      sum[cur] += sum[viz];
    }

    if( sum[cur] < l ){
      c[cur] = 1LL*l - sum[cur];
      sum[cur] = l;
    }
    if( sum[cur] > r ){
      c[cur] = 1LL*r - sum[cur];
      sum[cur] = r;
    }
  };

  dfs( 0 );

  ll resp = 0;
  for( int i = 0; i < n; i++ ) resp += 1LL*abs(c[i])*w[i];
  return resp;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...