제출 #198799

#제출 시각아이디문제언어결과실행 시간메모리
198799osaaateiasavtnl동기화 (JOI13_synchronization)C++14
30 / 100
153 ms38108 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define ii pair <int, int> #define app push_back #define all(a) a.begin(), a.end() #define bp __builtin_popcount #define ll long long #define mp make_pair #define f first #define s second #define Time (double)clock()/CLOCKS_PER_SEC const int N = 2e5 + 7; vector <int> g[N]; ii ed[N]; set <ii> ms[N]; int l[N], num[N], par[N]; bool us[N]; int n, m, q; void dfs(int u, int p) { par[u] = p; for (int v : g[u]) if (v != p) dfs(v, u); } int ans = 0; void solve(int u, int p, int x) { ++ans; for (int v : g[u]) if (v != p) { auto t = ms[v].lower_bound(mp(x + 1, -1)); if (t == ms[v].begin()) continue; --t; solve(v, u, min(x, t->s)); } } signed main() { #ifdef HOME freopen("input.txt", "r", stdin); #else ios_base::sync_with_stdio(0); cin.tie(0); #endif cin >> n >> m >> q; for (int i = 0; i < n - 1; ++i) { int u, v; cin >> u >> v; ed[i] = mp(u, v); g[u].app(v); g[v].app(u); } for (int i = 0; i < m; ++i) { cin >> num[i]; --num[i]; } int root; cin >> root; dfs(root, root); for (int i = 0; i < m; ++i) { int u = ed[num[i]].f, p = ed[num[i]].s; if (u == par[p]) swap(u, p); if (us[num[i]]) { //cout << "insert " << u << " : " << l[num[i]] << ' ' << i << '\n'; ms[u].insert(mp(l[num[i]], i)); } else { l[num[i]] = i; } us[num[i]] ^= 1; } for (int i = 0; i < n - 1; ++i) { if (us[i]) { int u = ed[i].f, p = ed[i].s; if (u == par[p]) swap(u, p); //cout << "insert " << u << " : " << l[i] << ' ' << m << '\n'; ms[u].insert(mp(l[i], m)); } } solve(root, root, N); cout << ans << '\n'; }
#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...