Submission #258766

#TimeUsernameProblemLanguageResultExecution timeMemory
258766davooddkareshkiSynchronization (JOI13_synchronization)C++17
100 / 100
730 ms38992 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define F first #define S second #define pii pair<int,int> #define mpr make_pair typedef long long ll; const int maxn = 2e5+10; const int mod = 1e9+7; const ll inf = 1e18+10; int n, q, k; int fen[maxn]; void _add(int pos, int val) {for(; pos <= n; pos |= (pos+1)) fen[pos] += val;} void fen_add(int l, int r, int val) {_add(l,val); _add(r+1,-val);} int fen_qu(int pos) {int res = 0; for(; pos >= 0; pos = (pos&(pos+1))-1) res += fen[pos]; return res;} vector<pii> g[maxn]; int st[maxn], tin[maxn], tim, h[maxn]; int par[maxn][20], id[maxn]; void add(int v, int val) {fen_add(tin[v], tin[v]+st[v]-1, val);} int qu(int v) {return fen_qu(tin[v]);} void dfs(int v) { for(int i = 1; (1<<i) <= h[v]; i++) par[v][i] = par[par[v][i-1]][i-1]; st[v] = 1; tin[v] = ++tim; for(auto e : g[v]) { int u = e.F; if(u != par[v][0]) { id[e.S] = u; par[u][0] = v; h[u] = h[v] + 1; dfs(u); st[v] += st[u]; } } } int get_par(int v) { for(int i = 19; i >= 0; i--) if(par[v][i] && ((qu(v) - qu(par[v][i])) == (1<<i))) v = par[v][i]; return v; } bool is[maxn]; int ans[maxn], last_ans[maxn]; signed main() { //ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>> n >> q >> k; for(int i = 1, u, v; i < n; i++) { cin>> u >> v; g[u].push_back({v,i}); g[v].push_back({u,i}); } dfs(1); for(int i = 1; i <= n; i++) ans[i] = 1; while(q--) { int e; cin>> e; int v = id[e]; int u = par[v][0]; int lca = get_par(u); // cout<< u <<" "<< lca <<"\n"; if(is[e]) { last_ans[v] = ans[lca]; ans[v] = ans[lca]; add(v,-1); } else { ans[lca] += ans[v] - last_ans[v]; add(v,1); } (is[e] ^= 1); } while(k--) { int v; cin>> v; cout<< ans[get_par(v)] <<"\n"; } }
#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...