728x90
https://www.acmicpc.net/problem/12896
728x90
메모리: 62,004 KB , 시간: 532 ms
사용 알고리즘: 깊이 우선 탐색, 그래프 이론, 그래프 탐색, 트리
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
private static ArrayList<ArrayList<Integer>> edges;
private static boolean[] visited;
private static int result;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
edges = new ArrayList<>();
for (int i = 0; i <= N; i++) {
edges.add(new ArrayList<>());
}
int u, v;
for (int i = 0; i < N - 1; i++) {
st = new StringTokenizer(br.readLine());
u = Integer.parseInt(st.nextToken());
v = Integer.parseInt(st.nextToken());
edges.get(u).add(v);
edges.get(v).add(u);
}
visited = new boolean[N + 1];
result = 0;
getLongest(1);
if(result % 2 == 0) System.out.println(result / 2);
else System.out.println(result / 2 + 1);
}
private static int getLongest(int node) {
visited[node] = true;
ArrayList<Integer> edge = edges.get(node);
int[] ret = new int[edge.size() + 2];
for (int i = 0; i < edge.size(); i++) {
if(!visited[edge.get(i)]) {
ret[i] = getLongest(edge.get(i)) + 1;
}
}
Arrays.sort(ret);
result = Math.max(result, ret[ret.length - 1] + ret[ret.length - 2]);
return ret[ret.length - 1];
}
}
728x90
'Problem Solving > BOJ' 카테고리의 다른 글
[백준, BOJ 1944] 복제 로봇 (java) (1) | 2024.04.07 |
---|---|
[백준, BOJ 17951] 흩날리는 시험지 속에서 내 평점이 느껴진거야 (java) (1) | 2024.04.06 |
[백준, BOJ 19566] 수열의 구간 평균 (java) (0) | 2024.04.01 |
[백준, BOJ 17490] 일감호에 다리 놓기 (java) (0) | 2024.03.31 |
[백준, BOJ 9007] 카누 선수 (java) (0) | 2024.03.28 |