https://programmers.co.kr/learn/courses/30/lessons/76503
#include <string>
#include <vector>
#include <cstring>
#include <iostream>
using namespace std;
const int MAX = 300001;
int root = 0;
vector<int> map[MAX];
int visited[MAX];
long long answer = 0;
vector<long long> v;
void dfs(int parent) {
visited[parent] = true;
for (int i = 0; i < map[parent].size(); i++) {
if (visited[map[parent][i]] == true) continue;
dfs(map[parent][i]);
answer += abs(v[map[parent][i]]);
v[parent] += v[map[parent][i]];
v[map[parent][i]] = 0;
}
}
long long solution(vector<int> a, vector<vector<int>> adges) {
memset(visited, -1, sizeof(visited));
for (int i = 0; i < a.size(); i++) {
v.push_back(a[i]);
}
for (int i = 0; i < adges.size(); i++) {
map[adges[i][0]].push_back(adges[i][1]);
map[adges[i][1]].push_back(adges[i][0]);
}
visited[0] = true;
dfs(0);
if (v[0] != 0) return -1;
else return answer;
}
'프로그래머스' 카테고리의 다른 글
파괴되지 않은 건물 C++ (0) | 2022.02.15 |
---|---|
스타 수열 C++ (0) | 2022.02.11 |
아이템 줍기 C++ (0) | 2022.02.07 |
2 X n 타일링 C++ (0) | 2022.01.30 |
단어 변환 C++ (0) | 2022.01.29 |