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 |