728x90
url : https://www.acmicpc.net/problem/1167
트리의 지름
leaf노드 ~ leaf노드까지의 거리 구하기
1. leaf 노드 구하기 (dfs)
2. leaf 노드에서 출발하여 dfs 최대 거리 구하기(leaf 노드 ~ leaf 노드)
코드
#include <bits/stdc++.h>
using namespace std;
int v, n, a, b, farthestNode, maxDistance;
vector<pair<int, int>> tree[100004];
int visited[100004];
void dfs(int node, int distance){
if (distance > maxDistance){
maxDistance = distance;
farthestNode = node;
}
visited[node] = 1;
for (auto &p : tree[node]){
if (visited[p.first]) continue;
dfs(p.first, distance + p.second);
}
}
int main(){
//1. 입력받기
cin >> v;
for(int i=0;i<v;i++){
cin >> n;
while(true){
cin >> a;
if (a==-1) break;
cin >> b;
tree[n].push_back({a, b});
}
}
// 2. 가장 긴 노드 찾기
dfs(1, 0);
// 3. 가장 긴 노드로 최대 거리 = 트리의 지름 구하기
maxDistance = 0;
fill(visited, visited+100004, 0);
dfs(farthestNode, 0);
//4. 정답 출력하기
cout << maxDistance;
}
728x90
'알고리즘 > 알고리즘 문제풀이' 카테고리의 다른 글
[백준] 1918 : 후위 표기식 (2) | 2024.01.09 |
---|---|
[백준] 10451 : 순열 사이클, 순열 그래프 (0) | 2024.01.06 |
[백준] 1149번 : RGB 거리 (0) | 2024.01.04 |
[프로그래머스] 147355 : 크기가 작은 문자열, 154540: 무인도 여행, 여담 (0) | 2024.01.03 |
[백준] 15654: N과 M(5) (0) | 2024.01.02 |