Submission #1201200

#TimeUsernameProblemLanguageResultExecution timeMemory
1201200NeltTree (IOI24_tree)C++20
18 / 100
58 ms19456 KiB
#include <bits/stdc++.h> #include "tree.h" #define ll long long #define endl "\n" using namespace std; const ll N = 2e5 + 5; int n; vector<ll> g[N]; vector<ll> a, pa; ll dp[N]; bool used[N]; std::vector<int> p, w; ll tot = 0; ll cnt = 0; void dfs(ll v) { used[v] = 1; tot += g[v].size() == 0; cnt += (g[v].size() == 0) * w[v]; for (ll to : g[v]) dfs(to); } void init(std::vector<int> P, std::vector<int> W) { p = P; n = p.size(); w = W; w.insert(w.begin(), 0); p.insert(p.begin(), 0); for (ll i = 1; i <= n; i++) { p[i]++; if (w[p[i]]) g[p[i]].push_back(i); } for (ll i = 1; i <= n; i++) if (!used[i]) { tot = 0; dfs(i); a.push_back(tot); } sort(a.begin(), a.end()); a.insert(a.begin(), 0); pa.push_back(0); for (ll i = 1; i < a.size(); i++) pa.push_back(pa.back() + a[i]); } long long query(int l, int r) { ll pos = upper_bound(a.begin(), a.end(), r / l) - a.begin() - 1; return (pa.back() - pa[pos]) * l + l * cnt - (pa.size() - pos - 1) * r; }
#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...