제출 #99777

#제출 시각아이디문제언어결과실행 시간메모리
99777shoemakerjoSynchronization (JOI13_synchronization)C++14
0 / 100
61 ms14656 KiB
#include <bits/stdc++.h> using namespace std; #define maxn 200010 #define pii pair<int, int> int N, M, Q; vector<pii> adj[maxn]; //store the node and the value pii ed[maxn]; //store the edges bool isin[maxn]; int dj[maxn]; bool canreach[maxn]; void dfs(int u, int p = -1) { canreach[u] = true; for (pii vp : adj[u]) { if (isin[vp.second] && vp.first != p) { dfs(vp.first, u); } } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> N >> M >> Q; int u, v; for (int i = 1; i <= N-1; i++) { cin >> u >> v; adj[u].push_back(pii(v, i)); adj[v].push_back(pii(u, i)); ed[i] = pii(u, v); } for (int i = 1; i <= M; i++) { cin >> dj[i]; isin[dj[i]] ^= true; } int rt; //the root cin >> rt; canreach[rt] = true; dfs(rt); for (int i = M; i >= 1; i--) { u = ed[dj[i]].first; v = ed[dj[i]].second; canreach[u] |= canreach[v]; canreach[v] |= canreach[u]; } int res = 0; for (int i = 1; i <= N; i++) { if (canreach[i]) { // cout << " " << i << " reaches " << endl; res++; } } cout << res << endl; }
#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...