풀이
트리에서 임의의 노드 ㄱ을 고른 뒤
ㄱ에서 가장 먼 노드 ㄴ을 찾고
ㄴ에서 가장 먼 노드 ㄷ을 찾으면
ㄴ과 ㄷ이 트리의 지름이 된다 (!)
코드
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int n_ = 1e4 + 4;
struct edg { int idx, dst; };
int n, abc, sum;
vector<edg> gph[n_];
void dfs(int prv, int now, int dst) {
if (sum < dst) sum = dst, abc = now;
for (edg nxt : gph[now]) if (prv != nxt.idx)
dfs(now, nxt.idx, dst + nxt.dst);
}
int main() {
scanf("%d", &n);
for (int i = 1, u, v, k; i < n; i++) {
scanf("%d %d %d", &u, &v, &k);
gph[u].push_back({ v,k });
gph[v].push_back({ u,k });
}
abc = 1, dfs(0, abc, 0);
sum = 0, dfs(0, abc, 0);
printf("%d", sum);
return 0;
}
아무말
백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨, 씨쁠쁠, JAVA, algorithm, 자바, 알고리즘, 자료구조, 문제, 문제 풀이, 풀이