프로그래머스
매출 하락 최소화 C++
paysmile
2021. 8. 9. 23:15
https://programmers.co.kr/learn/courses/30/lessons/72416
코딩테스트 연습 - 매출 하락 최소화
CEO를 포함하여 모든 직원은 팀장 또는 팀원이라는 직위를 가지고 있으며 그림에서는 팀장과 팀원의 관계를 화살표로 표시하고 있습니다. 화살표가 시작되는 쪽의 직원은 팀장, 화살표를 받는
programmers.co.kr
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
const int MAX = 300001;
int sale[MAX];
int v[MAX][2];
vector<int> team[MAX];
void FindMinValue(int turn){
v[turn][0] = 0;
v[turn][1] = sale[turn];
int minvalue = 987654321;
if(team[turn].size() == 0)
return;
for(int i=0; i<team[turn].size(); i++){
FindMinValue(team[turn][i]);
if(v[team[turn][i]][0] < v[team[turn][i]][1] ){
v[turn][0] += v[team[turn][i]][0];
v[turn][1] += v[team[turn][i]][0];
minvalue = min(minvalue,v[team[turn][i]][1]-v[team[turn][i]][0]);
}
else{
v[turn][0] += v[team[turn][i]][1];
v[turn][1] += v[team[turn][i]][1];
minvalue = 0;
}
}
v[turn][0] += minvalue;
}
int solution(vector<int> sales, vector<vector<int>> links) {
for(int i=0; i<sales.size(); i++){
sale[i] = sales[i];
}
for(int i=0; i<links.size(); i++){
team[links[i][0]-1].push_back(links[i][1]-1);
}
FindMinValue(0);
return min(v[0][0],v[0][1]);
}