https://www.acmicpc.net/problem/16437
걸린 시간 : 24분
골드3이 맞나... 싶은 문제.
알고리즘
루트(1번 섬)부터 시작해서 자식들로부터 오는 양의 수를 세면 된다.
dfs(int k) 메소드는 k번째 섬에 오는 양의 수이다. 만약 늑대가 다 먹어서 다 못 온다면 0이 오게 될 것이다.
정답 코드
#include <bits/stdc++.h>
using namespace std;
int N;
long long island[123457];
vector<int> children[123457];
bool kind[123457];
long long dfs(int k) {
if (kind[k]) {
long long ret = island[k];
for (int c : children[k]) {
ret += dfs(c);
}
return ret;
}
else {
long long ret = -island[k];
for (int c : children[k]) {
ret += dfs(c);
}
return max((long long)0, ret);
}
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for (int i = 2; i <= N; i++) {
char t;
long long a;
int p;
cin >> t >> a >> p;
kind[i] = t == 'S';
children[p].push_back(i);
island[i] = a;
}
long long answer = 0;
for (int c : children[1]) {
answer += dfs(c);
}
cout << answer;
return 0;
}
'Baekjoon Online Judge' 카테고리의 다른 글
[BOJ] 20057 : 마법사 상어와 토네이도 (C++) (1) | 2024.04.27 |
---|---|
[BOJ] 3190 : 뱀 (C++) (1) | 2024.04.27 |
[BOJ] 12015 : 가장 긴 증가하는 부분 수열 2 (C++) (1) | 2023.12.26 |
[BOJ] 2805 : 나무 자르기 (C++) (1) | 2023.12.26 |
[BOJ] 9019 : DSLR (Java) (0) | 2023.11.09 |