import java.util.*;
import java.io.*;
public class Main{
static ArrayList<Node>[] al;
static boolean[] visited;
static int node;
static int max = 0;
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bf.readLine());
if(n == 1) {
System.out.println(0);
}
else {
al = new ArrayList[n + 1];
for (int i = 1; i < n + 1; i++) {
al[i] = new ArrayList<>();
}
for (int i = 0; i < n - 1; i++) {
StringTokenizer st = new StringTokenizer(bf.readLine());
int p = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
int v = Integer.parseInt(st.nextToken());
al[p].add(new Node(c, v));
al[c].add(new Node(p, v));
}
visited = new boolean[n + 1];
dfs(1, 0);
visited = new boolean[n + 1];
dfs(node, 0);
System.out.println(max);
}
}
public static void dfs(int a, int len) {
if (max < len) {
max = len;
node = a;
}
visited[a] = true;
for (int i = 0; i<al[a].size(); i++) {
Node n = al[a].get(i);
if (!visited[n.x]) {
dfs(n.x, n.cost + len);
}
}
}
public static class Node {
int x, cost;
public Node(int x, int cost) {
this.x = x;
this.cost = cost;
}
}
}
트리의 지름을 구하는 문제다.
저번에 이 유형을 풀어봐서 dfs를 두번 돌려버렸다.
그런데 문제 예제도 잘 나오고 하는데 정답제출하니까 nullpoint예외가 나왔다. 이게 나올리가 없는데 계속해서 생각했는데 다른 분들걸 봤더니 문제에 노드의 개수 n(1 ≤ n ≤ 10,000)를 이따구로 정의해놨다.
n이 입력되면 두번재줄부터 n-1개의 연결식이 나오는데 n이 1이면 당연히 연결식도 없다... 그래서 al[1]이 선언은 됐는데 .size()가 null나온다.
그래서 n==1일때 예외처리를 해줬고 잘 풀렸다...
앞으로 이런부분은 좀 치사하다 생각하지만...다음부터 잘 봐야겠다.