본문 바로가기

Algorithm/BAEKJOON

[BOJ] 14267번 회사 문화 1 (C++)

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