728x90
반응형
https://www.acmicpc.net/problem/14267
14267번: 회사 문화 1
영선회사에는 매우 좋은 문화가 있는데, 바로 상사가 직속 부하를 칭찬하면 그 부하가 부하의 직속 부하를 연쇄적으로 칭찬하는 내리 칭찬이 있다. 즉, 상사가 한 직속 부하를 칭찬하면 그 부하
www.acmicpc.net
#include <iostream>
#include <vector>
#define MAX 100001
using namespace std;
int n, m;
vector<int> v[MAX];
int cpm[MAX];
void dfs(int num){
for(int i = 0; i < v[num].size(); i++){
cpm[v[num][i]] += cpm[num];
dfs(v[num][i]);
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> m;
for(int i = 1; i <= n; i++){
int x;
cin >> x;
if(x != -1){
v[x].push_back(i);
}
}
for(int i = 0; i < m; i++){
int a, b;
cin >> a >> b;
cpm[a] += b;
}
dfs(1);
for(int i = 1; i <= n; i++){
cout << cpm[i] << " ";
}
return 0;
}
처음에 풀 땐 칭찬 수치를 저장하지 않고 칭찬을 입력받을 때마다 dfs를 돌려서 시간 초과가 났다.
칭찬 수치를 먼저 cpm[]에 저장하고, root 노드인 1번부터 dfs를 실행하여 수치를 누적해가며 더해주어야 한다.
728x90
반응형
'Algorithm > BAEKJOON' 카테고리의 다른 글
[BOJ] 1261번 알고스팟 (C++) (0) | 2022.11.04 |
---|---|
[BOJ] 1504번 특정한 최단 경로 (C++) (0) | 2022.11.01 |
[BOJ] 13549번 숨바꼭질 3 (C++) (0) | 2022.09.05 |
[BOJ] 2109번 순회강연 (C++) (0) | 2022.08.21 |
[BOJ] 1874번 스택 수열 (C++) (0) | 2022.08.18 |