반응형

https://www.acmicpc.net/problem/15681

 

15681번: 트리와 쿼리

트리의 정점의 수 N과 루트의 번호 R, 쿼리의 수 Q가 주어진다. (2 ≤ N ≤ 105, 1 ≤ R ≤ N, 1 ≤ Q ≤ 105) 이어 N-1줄에 걸쳐, U V의 형태로 트리에 속한 간선의 정보가 주어진다. (1 ≤ U, V ≤ N, U ≠ V)

www.acmicpc.net

 

루트에서 시작하여 각 정점들을 깊이 우선 탐색하여 방문하고, 방문한 정점들을 빠져나오면서 각 정점이 방문했던 정점의 개수들을 기억해주었습니다.

 

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

int n, r, q, u, v;
vector<int> graph[100001];
int dp[100001] = { 0 };

int init(int node) {
	dp[node] = 1;
	for (int i = 0; i < graph[node].size(); i++) {
		if (dp[graph[node][i]] != 0) continue;
		dp[node] += init(graph[node][i]);
	}
	return dp[node];
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	
	cin >> n >> r >> q;
	for (int i = 1; i < n; i++) {
		cin >> u >> v;
		graph[u].push_back(v);
		graph[v].push_back(u);
	}

	init(r);

	while (q--) {
		cin >> u;
		cout << dp[u] << "\n";
	}
}
반응형

'Algorithm' 카테고리의 다른 글

백준 1949 : 우수 마을  (0) 2021.11.18
백준 2213 : 트리의 독립집합  (0) 2021.11.18
백준 19598 : 최소 회의실 개수  (0) 2021.11.18
백준 18513 : 샘터  (0) 2021.11.18
백준 16202 : MST 게임  (0) 2021.11.18

+ Recent posts