Submission #1090197

#TimeUsernameProblemLanguageResultExecution timeMemory
1090197efishelSynchronization (JOI13_synchronization)C++17
10 / 100
8061 ms16008 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using vll = vector <ll>; using ii = pair <ll, ll>; using vii = vector <ii>; const ll MAXN = 1E5+16; vii adj[MAXN]; bool isOn[MAXN]; ii edg[MAXN]; ll ans[MAXN]; ii last[MAXN]; void dfs (ll u, ll par, ll add) { ans[u] += add; for (auto [v, id] : adj[u]) { if (v == par || !isOn[id]) continue; dfs(v, u, add); } } int main () { cin.tie(nullptr) -> sync_with_stdio(false); ll n, Q, qa; cin >> n >> Q >> qa; for (ll id = 1; id < n; id++) { ll u, v; cin >> u >> v; u--; v--; adj[u].push_back({ v, id }); adj[v].push_back({ u, id }); edg[id] = { u, v }; } fill(isOn, isOn+n, false); fill(ans, ans+n, 1); fill(last, last+n, ii{ 0, 0 }); while (Q--) { ll id; cin >> id; auto [u, v] = edg[id]; if (isOn[id] ^= 1) { ll sumU = ans[v] - last[id].second; // how much v has grown ll sumV = ans[u] - last[id].first; // how much u has grown dfs(u, v, sumU); dfs(v, u, sumV); } else { last[id] = ii{ ans[u], ans[v] }; } } while (qa--) { ll u; cin >> u; u--; cout << ans[u] << '\n'; } return 0; }
#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...