BOJ 15681 트리와 쿼리

Jmnote (토론 | 기여)님의 2023년 12월 31일 (일) 12:32 판 (새 문서: ==개요== {{BOJ | 단계 = 38 | 분류1 = 다이나믹 프로그래밍 | 분류2 = 그래프 이론 | 분류3 = 그래프 탐색 | 분류4 = 트리 | 분류5 = 깊이 우선 탐색 |...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

1 개요[ | ]

BOJ 15681 트리와 쿼리

2 C++[ | ]

#include <bits/stdc++.h>
using namespace std;

int N, R, Q;
vector<int> e[100001];
bool visited[100001];
int nums[100001];

int dfs(int r) {
    if (nums[r] != 0) return nums[r];
    visited[r] = true;
    int cnt = 1;
    for (int i=0; i<e[r].size(); i++){
        int next = e[r][i];
        if (visited[next]) continue;
        cnt += dfs(next);
    }
    nums[r] = cnt;
    return cnt;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> N >> R >> Q;
    int U, V;
    for (int i=0; i<N-1; i++) {
        cin >> U >> V;
        e[U].push_back(V);
        e[V].push_back(U);
    }
    dfs(R);
    for (int i=0; i<Q; i++){
        cin >> U;
        cout << nums[U] << '\n';
    }
}