Submission #49580

#TimeUsernameProblemLanguageResultExecution timeMemory
49580mra2322001Synchronization (JOI13_synchronization)C++14
100 / 100
613 ms68360 KiB
#include <bits/stdc++.h> #define f0(i, n) for(int i=(0); i<n; i++) #define f1(i, n) for(int i=(1); i<=n; i++) using namespace std; typedef long long ll; const int N = 100002; int n, m, q, dd[N], ans[N], tin[N], tout[N], t[8*N]; vector <pair <int, int> > edge; int last[N]; vector <int> a[N]; ostream& operator << (ostream &os, pair <int, int> x){ cout << x.first << " " << x.second; } istream& operator >> (istream &is, pair <int, int> &x){ cin >> x.first >> x.second; } int tim = 0; void dfs(int u, int p){ tin[u] = ++tim; for(auto v:a[u]) if(v != p) dfs(v, u); tout[u] = ++tim; } void up(int k, int l, int r, int i, int val){ if(r < i || l > i) return ; if(l==r){ t[k] += val; return ; } int mid = (l + r)/2; up(k*2, l, mid, i, val); up(k*2+1, mid + 1, r, i, val); int x = t[k*2], y = t[2*k+1]; if(tout[x] > tout[y]) t[k] = x; else t[k] = y; } int get1(int k, int l, int r, int i, int val){ if(l > i) return 0; if(r <= i && tout[t[k]] < tout[val]) return 0; if(l==r) return t[k]; int mid = (l + r)/2; int y = get1(k*2 + 1, mid + 1, r, i, val); if(y) return y; else return get1(k*2, l, mid, i, val); } main(){ ios_base::sync_with_stdio(0); pair <int, int> ed; cin >> n >> m >> q; f1(i, n - 1){ cin >> ed; edge.push_back(ed); a[ed.first].push_back(ed.second); a[ed.second].push_back(ed.first); } dfs(1, 1); f1(i, n) ans[i] = 1, up(1, 1, 2*n, tin[i], i); while(m--){ int d; cin >> d; --d; dd[d] ^= 1; int u = edge[d].first, v = edge[d].second; if(tin[u] > tin[v]) swap(u, v); int p = get1(1, 1, 2*n, tin[u], u); if(dd[d]){ ans[p] = ans[p] + ans[v] - last[v]; up(1, 1, 2*n, tin[v], -v); } else{ ans[v] = ans[p]; up(1, 1, 2*n, tin[v], v); } last[v] = ans[v]; } while(q--){ int u; cin >> u; cout << ans[get1(1, 1, 2*n, tin[u], u)] << endl; } }

Compilation message (stderr)

synchronization.cpp: In function 'std::ostream& operator<<(std::ostream&, std::pair<int, int>)':
synchronization.cpp:15:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
synchronization.cpp: In function 'std::istream& operator>>(std::istream&, std::pair<int, int>&)':
synchronization.cpp:18:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
synchronization.cpp: At global scope:
synchronization.cpp:51:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
 main(){
      ^
#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...