코드 복사/붙여넣기 하는 당신이 아름답습니다.

1967 : 트리의 지름

풀이

트리에서 임의의 노드 ㄱ을 고른 뒤

ㄱ에서 가장 먼 노드 ㄴ을 찾고

ㄴ에서 가장 먼 노드 ㄷ을 찾으면

ㄴ과 ㄷ이 트리의 지름이 된다 (!)

코드

#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, 자바, 알고리즘, 자료구조, 문제, 문제 풀이, 풀이

wookje.kwon's profile image

wookje.kwon

2018-01-07 17:52

Read more posts by this author