https://www.acmicpc.net/problem/25515
25515번: 트리 노드 합의 최댓값
노드 0, 노드 1, 노드 2, 노드 4, 노드 5, 노드 6, 노드 7을 방문하는게 정답이다.
www.acmicpc.net
tree dp를 통해 해결하는 문제이다.
만약 현재 정점의 비용을 cur_cost, 다음 정점의 비용을 next_cost라 하면
현재 정점에서의 최댓값은 다음이 성립함을 알 수 있다.
cur_cost = max(cur_cost+next_cost, cur_cost)
(비용이 음수 일 수도 있기 때문에 최대를 선택해주어야 한다)
#include<bits/stdc++.h>
using namespace std;
#define N 100100
typedef long long ll;
vector<int> tree[N];
ll dp[N],weight[N],n;
bool visited[N];
void dfs(int cur){
if(visited[cur])
return;
visited[cur] = 1;
dp[cur] = weight[cur];
for(auto next : tree[cur]){
if(visited[next])
continue;
dfs(next);
dp[cur] = max(dp[cur]+dp[next],dp[cur]);
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n;
for(int i=1; i<n; i++){
int a,b; cin>>a>>b;
tree[a].push_back(b);
tree[b].push_back(a);
}
for(int i=0; i<n; i++)
cin>>weight[i];
dfs(0);
cout << dp[0];
return 0;
}
'문제 풀이' 카테고리의 다른 글
[c++] 백준 12978 스크루지 민호 2 (0) | 2023.05.22 |
---|---|
[c++] 백준 2533 사회망 서비스(SNS) (0) | 2023.05.21 |
[c++] 백준 15681 트리와 쿼리 (0) | 2023.05.21 |
[c++] 백준 24232 망가진 나무 (0) | 2023.05.21 |
[c++] 백준 2213 트리의 독립집합 (0) | 2023.05.21 |