Submission #1185039

#TimeUsernameProblemLanguageResultExecution timeMemory
1185039nguynSynchronization (JOI13_synchronization)C++20
100 / 100
174 ms26172 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define F first #define S second #define pb push_back #define pii pair<int,int> const int N = 2e5 + 5; int n, m, q; vector<int> g[N]; pii e[N]; int tin[N], tout[N], h[N], bit[N]; int timedfs; int up[N][20]; int del[N]; int res[N], lst[N]; void update(int id, int val) { for (int i = id; i <= n; i += (i & -i)) bit[i] += val; } int get(int id) { int res = 0; for (int i = id; i > 0; i -= (i & -i)) res += bit[i]; return res; } void pre_dfs(int u, int p) { res[u] = 1; tin[u] = ++timedfs; for (int v : g[u]) { if (v == p) continue; up[v][0] = u; for (int i = 1; i < 20; i++) up[v][i] = up[up[v][i - 1]][i - 1]; h[v] = h[u] + 1; pre_dfs(v, u); } tout[u] = timedfs; } int find(int u) { for (int i = 19; i >= 0; i--) { if (get(tin[up[u][i]]) == get(tin[u])) { u = up[u][i]; } } return u; } signed main(){ ios_base::sync_with_stdio(false) ; cin.tie(0) ; cout.tie(0) ; if (fopen("INP.INP" ,"r")) { freopen("INP.INP" ,"r" , stdin) ; freopen("OUT.OUT" , "w" , stdout) ; } cin >> n >> m >> q; for (int i = 1; i < n; i++) { int u, v; cin >> u >> v; g[u].pb(v); g[v].pb(u); e[i] = {u, v}; } pre_dfs(1, 0); for (int i = 1; i <= n; i++) { update(tin[i], -1); update(tout[i] + 1, 1); } for (int i = 1; i <= m; i++) { int id; cin >> id; int u = e[id].F; int v = e[id].S; if (h[u] > h[v]) swap(u, v); if (!del[id]) { res[find(u)] += res[v] - lst[v]; update(tin[v], 1); update(tout[v] + 1, -1); } else { res[v] = lst[v] = res[find(u)]; update(tin[v], -1); update(tout[v] + 1, 1); } del[id] ^= 1; } for (int i = 1; i <= q; i++) { int u; cin >> u; cout << res[find(u)] << '\n'; } }

Compilation message (stderr)

synchronization.cpp: In function 'int main()':
synchronization.cpp:58:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   58 |         freopen("INP.INP" ,"r" , stdin) ;
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
synchronization.cpp:59:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   59 |         freopen("OUT.OUT" , "w" , stdout) ;
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
#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...