PS (C, C++)

[백준/C++] 25516 거리가 k이하인 트리 노드에서 사과 수확하기

최연재 2024. 11. 5. 23:18

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

코드

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

#define FASTIO ios::sync_with_stdio(false);cin.tie(NULL);
#define MAX 100001

int n, k, ans;
vector<int> v[MAX];
int cnt[MAX];

void dfs(int now, int ncnt) {
	if (ncnt > k) return;
	ans += cnt[now];
	for (int i = 0; i < v[now].size(); i++)
		dfs(v[now][i], ncnt + 1);
}

int main() {
	FASTIO;
	cin >> n >> k;

	for (int i = 0, s, e; i < n - 1; i++) {
		cin >> s >> e;
		v[s].push_back(e);
	}
	
	for (int i = 0; i < n; i++) cin >> cnt[i];
	dfs(0, 0);
	cout << ans;
	return 0;
}

설명

트리를 생성한 후에 루트에서부터 DFS를 돌려서 K번까지 자식 노드로 이동합니다. 이 과정에서 노드별로 가진 사과의 개수를 더해나가고 마지막에 사과의 개수를 출력하면 됩니다.

 

느낀 점

DFS를 사용해서 한 번에 풀었습니다~