https://www.acmicpc.net/problem/1967
목적
두 노드 사이의 경로 길이의 최대값을 구하자.
접근법
1. DFS로 부분 트리의 자식 노드들을 살펴, 자식 노드를 거쳐 갈 수 있는 가장 긴 길이를 두 개를 더해 트리의 지름을 만들고 최대값을 갱신한다.
2. 가장 긴 길이는 반환 값으로 넘겨줘서, 그 값을 부모 트리에서 다시금 사용할 수 있게 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#include<bits/stdc++.h>
using namespace std;
vector<pair<int, int>> t[10001];
int ans=0;
int sol(int i) {
int a=0, b=0;
for (auto e : t[i]) {
int tmp = sol(e.first) + e.second;
if (a < tmp)b = a, a = tmp;
else if (b < tmp)b = tmp;
}
ans=max(ans,a+b);
return a;
}
int main() {
ios_base::sync_with_stdio(0);
int n; cin >> n;
while(--n){
int a, b, c; cin >> a >> b >> c;
t[a].push_back({ b,c });
}
sol(1);
cout << ans;
return 0;
}
|
문제 설명과 코드에 대한 피드백은 언제나 환영합니다.
다양한 의견 댓글로 남겨주세요.
'Problem Solving > BOJ 백준' 카테고리의 다른 글
[ BOJ 백준 2533번 - 사회망 서비스(SNS) ] 해설 및 코드 (0) | 2020.01.02 |
---|---|
[ BOJ 백준 1949번 - 우수 마을 ] 해설 및 코드 (0) | 2020.01.02 |
[ BOJ 백준 4256번 - 트리 ] 해설 및 코드 (1) | 2019.12.31 |
[ BOJ 백준 2250번 - 트리의 높이와 너비 ] 해설 및 코드 (0) | 2019.12.30 |
[ BOJ 백준 16437번 - 양 구출 작전 ] 해설 및 코드 (0) | 2019.12.30 |