반응형


<코드>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int N, a, b;
int citizen[10001];
int dp[10001][2];
bool visit[10001];
vector<int> v[10001];
void DFS(int now) // 현재, 합계, 우수마을여부
{
visit[now] = true;
dp[now][0] = 0;
dp[now][1] = citizen[now];
for (int next : v[now])
{
if (!visit[next])
{
DFS(next);
// 현재마을 != 우수마을 이라면 다음마을은 우수마을이거나 우수마을이 아님
dp[now][0] += max(dp[next][0], dp[next][1]);
// 현재마을 == 우수마을 이라면 다음마을은 우수마을이 아님
dp[now][1] += dp[next][0];
}
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for (int i = 1; i <= N; i++)
cin >> citizen[i];
for (int i = 1; i < N; i++)
{
cin >> a >> b;
v[a].push_back(b);
v[b].push_back(a);
}
DFS(1);
cout << max(dp[1][0], dp[1][1]);
}

1949번: 우수 마을
N개의 마을로 이루어진 나라가 있다. 편의상 마을에는 1부터 N까지 번호가 붙어 있다고 하자. 이 나라는 트리(Tree) 구조로 이루어져 있다. 즉 마을과 마을 사이를 직접 잇는 N-1개의 길이 있으며,
www.acmicpc.net
반응형
'🧩PS > 🥈Nomal' 카테고리의 다른 글
[C/C++] 백준 17386, 17387번 - 선분 교차 1, 2 (0) | 2021.03.21 |
---|---|
[C/C++] 백준 2166번 - 다각형의 면적 (신발끈 공식) (0) | 2021.03.21 |
[C/C++] 백준 16198번 - 에너지 모으기 (0) | 2021.03.20 |
[C/C++] 백준 2533번 - 사회망 서비스(SNS) (0) | 2021.03.20 |
[C/C++] 백준 15681번 - 트리와 쿼리 (0) | 2021.03.17 |