이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |