Submission #973466

#TimeUsernameProblemLanguageResultExecution timeMemory
973466beabossSynchronization (JOI13_synchronization)C++14
100 / 100
365 ms25340 KiB
// Source: https://oj.uz/problem/view/JOI13_synchronization // #include <bits/stdc++.h> using namespace std; #define FOR(i, a, b) for (int i = a; i < b; i++) #define pb push_back typedef vector<int> vi; typedef pair<int, int> pii; const int N = 1e5 + 10; const int B = 20; int bit[N]; void add(int ind, int val) { for (; ind < N; ind += (ind & -ind)) { bit[ind] += val; } } int query(int ind) { int res = 0; for (; ind > 0; ind -= (ind & -ind)) { res += bit[ind]; } return res; } vi adj[N]; vector<pii> con; int lift[N][B], tin[N], tout[N], last[N], info[N], d[N], active[N]; int timer = 1; void dfs(int cur, int par = 0) { lift[cur][0]=par; d[cur]=d[par]+1; tin[cur]=timer++; for (auto val: adj[cur]) { if (val != par) dfs(val, cur); } tout[cur]=timer; } int get(int cur) { int path = query(tin[cur]); for (int i = B - 1; i >= 0; i--) { if (lift[cur][i] != 0 && query(tin[lift[cur][i]]) == path) cur=lift[cur][i]; } return cur; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m, q; cin >> n >> m >> q; con.pb({0, 0}); FOR(i, 0, n-1) { int a, b; cin >> a >> b; adj[a].pb(b); adj[b].pb(a); con.pb({a, b}); } dfs(1); FOR(j, 1, B) FOR(i, 1, n + 1) lift[i][j] = lift[lift[i][j-1]][j-1]; FOR(i, 1, n + 1) { // cout << i << endl; add(tin[i], 1); add(tout[i], -1); info[i]=1; } FOR(_, 0, m) { int sw;cin >> sw; int a = con[sw].first; int b = con[sw].second; if (d[a] < d[b]) swap(a, b); // cout << a << b << endl; if (active[sw]) { info[a] = info[get(b)]; last[sw] = info[a]; add(tin[a], 1); add(tout[a], -1); } else { info[get(b)] += info[a] - last[sw]; add(tin[a], -1); add(tout[a], 1); } // cout << query(1) << query(2) << endl; // FOR(i, 1, n +1 ) cout << info[get(i)] << ' '; // cout << endl; active[sw] = !active[sw]; } FOR(_, 0, q) { int node; cin >> node; cout << info[get(node)] << endl; } }
#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...