[BOJ] 1167 - 트리의 지름 (C++)
문제
코드
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
int N, far = 0, M = -1;
bool visited[100001];
unordered_map<int, vector< pair<int, int> > > adj;
void dfs(int cur, int cnt){
visited[cur] = true;
if (M < cnt) {
M = cnt;
far = cur;
}
for (int i = 0; i < adj[cur].size(); i++){
int next = adj[cur][i].first, val = adj[cur][i].second;
if (visited[next]) continue;
dfs(next, cnt+val);
}
visited[cur] = false;
}
int main(void){
cin.tie(0);
ios_base::sync_with_stdio(false);
cin >> N;
for (int i = 0; i < N; i++){
int from, to = 0, val;
cin >> from;
while (1){
cin >> to;
if (to == -1) break;
cin >> val;
adj[from].push_back(make_pair(to, val));
}
}
dfs(1, 0); dfs(far, 0);
cout << M;
return 0;
}
접근
이전에 풀었던 트리의 지름 문제와 유사해서 다시 풀었다. 입력의 형태만 다르고문제 접근이나 코드는 비슷하다.
Author And Source
이 문제에 관하여([BOJ] 1167 - 트리의 지름 (C++)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@keybomb/BOJ-1167-트리의-지름-C저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)