Submission #1176826

#TimeUsernameProblemLanguageResultExecution timeMemory
1176826Kaztaev_AlisherTree (IOI24_tree)C++20
10 / 100
2097 ms27808 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(); 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); } } 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 { if(sz[v] > R){ c[v] = R-sz[v]; } else if(sz[v] < L){ c[v] = L-sz[v]; } sz[v] += c[v]; } } 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...