백준
백준 소스코드 [C++] 1967 트리의 지름
Hani_Levenshtein
2021. 1. 5. 04:00
1967번: 트리의 지름
파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연
www.acmicpc.net
백준 소스코드 [C++] 1967 트리의 지름
#include <iostream>
#include <algorithm>
#include <queue>
#include <string.h>
#include <limits.h>
#include <vector>
#include <math.h>
#include <stack>
#include <bitset>
#include <string>
#include <set>
#define all(v) v.begin(), v.end()
#define pii pair<int,int>
#define make_unique(v) v.erase(unique(v.begin(), v.end()), v.end())
typedef long long ll;
using namespace std;
vector<pii> v[10001];
int res[10001];
int sum[10001];
void dfs(int n) {
if (v[n].size() == 0) {
res[n] = 0;
sum[n] = 0;
return;
}
else if (v[n].size() == 1) {
dfs(v[n][0].first);
res[n] = v[n][0].second + sum[v[n][0].first];
sum[n] = v[n][0].second + sum[v[n][0].first];
}
else {
int k = v[n].size();
for(int i=0;i<k;i++)
dfs(v[n][i].first);
vector<int>w;
w.clear();
for (int i = 0;i < k;i++)
w.push_back(v[n][i].second + sum[v[n][i].first]);
sort(all(w));
res[n] = w[k - 1] + w[k - 2];
sum[n] = w[k - 1];
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, a, b, c;
cin >> n;
for (int i = 1;i < n;i++) {
cin >> a >> b >> c;
v[a].push_back({ b,c });
}
dfs(1);
int m = INT_MIN;
for (int i = 1;i <= n;i++) {
if (m < res[i]) m = res[i];
}
cout << m;
return 0;
}