https://www.acmicpc.net/problem/1967
트리의 지름이란 트리에서 노드 간 가장 긴 길이를 의미한다.
DFS를 아무 점에서 시작해서 가장 긴 부분의 위치를 찾는다. 그리고 그 위치에서 DFS를 돌려 가장 긴 부분을 찾는다. 그래서 나온 길이가 트리의 지름이 된다.
#include <cstdio>
#include <utility>
#include <vector>
using namespace std;
typedef pair<int, int> pii;
int n, res, idx;
vector<pii> v[10001];
bool visited[10001];
void DFS(int d, int h)
{
visited[h] = true;
if (d > res)
res = d, idx = h;
for (auto &i : v[h])
{
if (!visited[i.first])
{
DFS(i.second + d, i.first);
}
}
}
int main()
{
scanf("%d", &n);
for (int i = 0, f, t, w; i < n - 1; ++i)
{
scanf("%d %d %d", &f, &t, &w);
v[f].push_back({t, w});
v[t].push_back({f, w});
}
DFS(0, 1);
fill(visited, visited + n + 1, 0);
DFS(0, idx);
printf("%d\n", res);
return 0;
}
'온라인저지' 카테고리의 다른 글
[BOJ] 1727번: 커플 만들기 (0) | 2018.08.04 |
---|---|
[BOJ] 2775번: 부녀회장이 될테야 (0) | 2018.08.04 |
[BOJ] 10250번: ACM 호텔 (0) | 2018.08.04 |
[BOJ] 6603번: 로또 (0) | 2018.08.02 |
[BOJ] 2178번: 미로 탐색 (0) | 2018.08.02 |
[BOJ] 11383번: 뚊 (0) | 2018.08.02 |
댓글