Submission #1177735

#TimeUsernameProblemLanguageResultExecution timeMemory
1177735Kaztaev_AlisherTree (IOI24_tree)C++20
0 / 100
2097 ms31392 KiB
#include <bits/stdc++.h> #define ios ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0) #define file(s) if (fopen(s".in", "r")) freopen(s".in", "r", stdin), freopen(s".out", "w", stdout) #define all(a) a.begin() , a.end() #define F first #define S second using namespace std; using ll = long long; const ll N = 2e5+5 , inf = 2e9 + 7; const ll INF = 1e18 , mod = 1e9+7; ll n , w[N] , p[N] , sz[N] , c[N]; vector<int> g[N]; void init(vector<int> P, vector<int> W) { n = (int)P.size(); w[0] = inf; for(int i = 1; i <= n; i++){ p[i] = P[i-1]+1; w[i] = W[i-1]; } for(int i = 2; i <= n; i++){ g[p[i]].push_back(i); } } int get(int v, int L){ if(sz[v]-1 < L) return 0; int res = v; for(int to : g[v]){ int cur = get(to,L); if(w[cur] < w[res]) res = cur; } return res; } void dfs(ll v , ll L , ll R){ sz[v] = 0; c[v] = 0; for(int to : g[v]){ dfs(to,L,R); sz[v] += sz[to]; } if(g[v].size() == 0){ c[v] = sz[v] = L; } else { while(sz[v] > R){ int vx = get(v,L); // cout << v <<" " << vx <<" " << sz[v] << "\n"; sz[v]--; c[vx]--; while(vx != v){ sz[vx]--; vx = p[vx]; } } } } long long query(int L, int R) { dfs(1,L,R); ll ans = 0; for(int i = 1; i <= n; i++){ ans += abs(c[i])*w[i]; } return ans; } // int main() { // int N; // assert(1 == scanf("%d", &N)); // std::vector<int> P(N); // P[0] = -1; // for (int i = 1; i < N; i++) // assert(1 == scanf("%d", &P[i])); // std::vector<int> W(N); // for (int i = 0; i < N; i++) // assert(1 == scanf("%d", &W[i])); // int Q; // assert(1 == scanf("%d", &Q)); // std::vector<int> L(Q), R(Q); // for (int j = 0; j < Q; j++) // assert(2 == scanf("%d%d", &L[j], &R[j])); // fclose(stdin); // // init(P, W); // std::vector<long long> A(Q); // for (int j = 0; j < Q; j++) // A[j] = query(L[j], R[j]); // // for (int j = 0; j < Q; j++) // printf("%lld\n", A[j]); // fclose(stdout); // // return 0; // }
#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...