728x90
https://www.acmicpc.net/problem/1595
1595번: 북쪽나라의 도로
입력은 여러줄에 걸쳐 주어진다. 입력의 각 줄은 세 개의 양의 정수로 구성되어있는데, 각각은 차례대로 서로 다른 두 도시의 번호와 두 도시를 연결하는 도로의 길이를 의미한다. 모든 도로는
www.acmicpc.net
728x90
메모리: 17,220 KB , 시간: 188 ms
사용 알고리즘: 깊이 우선 탐색, 그래프 이론, 그래프 탐색, 트리
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static ArrayList<ArrayList<int[]>> edges;
static boolean[] visited;
static int result;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
edges = new ArrayList<>();
for (int i = 0; i < 10_001; i++) {
edges.add(new ArrayList<>());
}
String line;
int s, e, w;
while((line = br.readLine()) != null) {
st = new StringTokenizer(line);
if(!st.hasMoreTokens()) break;
s = Integer.parseInt(st.nextToken());
e = Integer.parseInt(st.nextToken());
w = Integer.parseInt(st.nextToken());
edges.get(s).add(new int[] {e, w});
edges.get(e).add(new int[] {s, w});
}
visited = new boolean[10_001];
result = 0;
getMaxLength(1);
System.out.println(result);
}
private static int getMaxLength(int node) {
visited[node] = true;
ArrayList<int[]> edge = edges.get(node);
int size = edge.size();
int[] child = new int[size + 2];
int[] next;
for (int i = 0; i < size; i++) {
next = edge.get(i);
if(!visited[next[0]]) child[i] = getMaxLength(next[0]) + next[1];
}
Arrays.sort(child);
result = Math.max(result, child[size + 1] + child[size]);
return child[size + 1];
}
}
728x90
'Problem Solving > BOJ' 카테고리의 다른 글
[백준, BOJ 13418] 학교 탐방하기 (java) (0) | 2024.02.27 |
---|---|
[백준, BOJ 2866] 문자열 잘라내기 (java) (1) | 2024.02.27 |
[백준, BOJ 14676] 영우는 사기꾼? (java) (0) | 2024.02.27 |
[백준, BOJ 2660] 회장뽑기 (java) (0) | 2024.02.25 |
[백준, BOJ 3673] 나눌 수 있는 부분 수열 (java) (1) | 2024.02.25 |