Submission #1187700

#TimeUsernameProblemLanguageResultExecution timeMemory
1187700zNatsumiSynchronization (JOI13_synchronization)C++20
40 / 100
8093 ms24264 KiB
#include <bits/stdc++.h> using namespace std; using ii = pair<int, int>; const int N = 2e5 + 5; int n, m, q, res = 0; bool status[N]; vector<ii> ad[N]; vector<ii> open[N]; void dfs(int u, int p, int ed){ res += 1; for(auto [v, w] : ad[u]) if(v != p){ auto it = upper_bound(open[w].begin(), open[w].end(), make_pair(ed, m)) - open[w].begin() - 1; if(it == -1) continue; dfs(v, u, min(ed, open[w][it].second)); } } int32_t main(){ cin.tie(0)->sync_with_stdio(0); // #define task "test" // if(fopen(task ".inp", "r")){ // freopen(task ".inp", "r", stdin); // freopen(task ".out", "w", stdout); // } cin >> n >> m >> q; for(int i = 1; i < n; i++){ int u, v; cin >> u >> v; ad[u].push_back({v, i}); ad[v].push_back({u, i}); } for(int i = 1; i <= m; i++){ int d; cin >> d; status[d] ^= 1; if(status[d]) open[d].push_back({i, -1}); else open[d].back().second = i - 1; } for(int i = 1; i < n; i++) if(status[i]) open[i].back().second = m; for(int i = 1; i < n; i++){ cerr << i << "\n"; for(auto [l, r] : open[i]) cerr << l << " " << r << "\n"; cerr << "\n"; } while(q--){ int c; cin >> c; res = 0; dfs(c, -1, m); cout << res << "\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...