알고리즘

[알고리즘] 백준 15681 - 트리와 쿼리 (C++)

blueberrysoda 2025. 2. 6. 23:59

[문제 링크] : https://www.acmicpc.net/problem/15681

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int N, R, Q;
vector<int> V[100001];
int Arr[100001];
bool Visit[100001];

int make(int n){
    if(Arr[n] != 0){
        return Arr[n];
    }
    Visit[n] = true;
	int ret = 1;
	for(int i=0; i<V[n].size(); i++){
		int next = V[n][i];
		if(Visit[next] == true){
            continue;
        }
		ret += make(next);
	}
	Arr[n] = ret;
	return ret;
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    cin >> N >> R >> Q;

    int u, v;
    for(int i=0; i<N-1; i++){
        cin >> u >> v;
        V[u].push_back(v);
        V[v].push_back(u);
    }

    Arr[R] = make(R);

    for(int i=0; i<Q; i++){
        cin >> u;
        cout << Arr[u] << "\n";
    }

    return 0;
}