본문 바로가기

PS

[ 백준 / C++ ] 15681 : 트리와 쿼리

[ 문제 ]

 

15681번: 트리와 쿼리

 

[ 접근방법 ]

 

root 노드부터 시작하여 dfs를 돌면서 subtree의 정점 수를 계산한다.

 

[ 소스코드 ]

 

#include <iostream>
#include <vector>

using namespace std;

int calculateSize(int current, int parent, vector<int> node[], vector<int> &size){
    int totalSize = 1;

    for(auto child : node[current]){
        if(child != parent){
            totalSize += calculateSize(child, current, node, size);
        }
    }

    return size[current] = totalSize;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    int n, r, q;
    cin >> n >> r >> q;

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

    vector<int> size(n + 1, 0);
    calculateSize(r, -1, node, size);

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

    return 0;
}

'PS' 카테고리의 다른 글

[ 백준 / C++ ] 16236 : 아기 상어  (0) 2025.01.03
[ 백준 / C++ ] 1963 : 소수 경로  (0) 2025.01.02
[ 백준 / C++ ] 2239 : 스도쿠  (0) 2024.12.26
[ 백준 / C++ ] 1303 : 전쟁 - 전투  (0) 2024.12.23
[ 백준 / C++ ] 2302 : 극장 좌석  (0) 2024.12.20