Submission #1282535

#TimeUsernameProblemLanguageResultExecution timeMemory
1282535baotoan655동기화 (JOI13_synchronization)C++20
100 / 100
229 ms21920 KiB
#include <bits/stdc++.h> #define file(name) if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); } using namespace std; const int N = 1e5 + 5, LG = 17; int n, m, q; vector<int> g[N]; int up[N][LG], in[N], out[N], tim; pair<int, int> ed[N]; int bit[N]; void upd(int i, int val) { for(++i; i < N; i += i & -i) bit[i] += val; } void upd(int l, int r, int val) { if(l > r) return; upd(l, val); upd(r + 1, -val); } int get(int i) { int res = 0; for(++i; i > 0; i -= i & -i) res += bit[i]; return res; } void dfs(int u, int p) { in[u] = ++tim; for(int v : g[u]) if(v != p) { up[v][0] = u; for(int i = 1; i < LG; ++i) up[v][i] = up[up[v][i - 1]][i - 1]; dfs(v, u); } out[u] = tim; } int root(int u) { for(int i = LG - 1; i >= 0; --i) { if(get(in[up[u][i]]) == get(in[u])) u = up[u][i]; } return u; } bool vs[N]; int ans[N], lst[N]; int main() { ios_base::sync_with_stdio(false); cin.tie(0), cout.tie(0); file("A") else file("task"); cin >> n >> m >> q; for(int i = 1, u, v; i < n; ++i) { cin >> u >> v; ed[i] = make_pair(u, v); g[u].emplace_back(v); g[v].emplace_back(u); } dfs(1, 0); for(int i = 1; i <= n; ++i) { upd(in[i], out[i], 1); ans[i] = 1;\ } for(int _ = 1; _ <= m; ++_) { int x; cin >> x; auto [u, v] = ed[x]; if(up[v][0] != u) swap(u, v); if(!vs[x]) { ans[root(u)] += ans[v] - lst[v]; upd(in[v], out[v], -1); } else { ans[v] = lst[v] = ans[root(u)]; upd(in[v], out[v], 1); } vs[x] ^= 1; } for(int i = 1; i <= q; ++i) { int x; cin >> x; cout << ans[root(x)] << '\n'; } return 0; }

Compilation message (stderr)

synchronization.cpp: In function 'int main()':
synchronization.cpp:2:58: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    2 | #define file(name)  if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
      |                                                   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
synchronization.cpp:45:5: note: in expansion of macro 'file'
   45 |     file("A") else file("task");
      |     ^~~~
synchronization.cpp:2:91: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    2 | #define file(name)  if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
      |                                                                                    ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
synchronization.cpp:45:5: note: in expansion of macro 'file'
   45 |     file("A") else file("task");
      |     ^~~~
synchronization.cpp:2:58: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    2 | #define file(name)  if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
      |                                                   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
synchronization.cpp:45:20: note: in expansion of macro 'file'
   45 |     file("A") else file("task");
      |                    ^~~~
synchronization.cpp:2:91: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    2 | #define file(name)  if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
      |                                                                                    ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
synchronization.cpp:45:20: note: in expansion of macro 'file'
   45 |     file("A") else file("task");
      |                    ^~~~
#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...