728x90
https://www.acmicpc.net/problem/14657
14657번: 준오는 최종인재야!!
첫째 줄에 문제의 수 N, 하루 풀이 시간 T가 주어진다. (2 ≤ N ≤ 50,000, 1 ≤ T ≤ 100,000) 이후 둘째 줄 부터 N-1개의 줄에 걸쳐 각 줄마다 A, B, C가 주어진다. (1 ≤ A, B ≤ N, 1 ≤ C ≤ 1,000) A와 B는
www.acmicpc.net
728x90
메모리: 53,340 KB , 시간: 712 ms
사용 알고리즘: 깊이 우선 탐색, 그래프 이론, 그래프 탐색, 트리
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int N;
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;
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
int T = Integer.parseInt(st.nextToken());
edges = new ArrayList<>();
for (int i = 0; i <= N; i++) {
edges.add(new ArrayList<>());
}
int A, B, C;
for (int i = 0; i < N - 1; i++) {
st = new StringTokenizer(br.readLine());
A = Integer.parseInt(st.nextToken());
B = Integer.parseInt(st.nextToken());
C = Integer.parseInt(st.nextToken());
edges.get(A).add(new int[] {B, C});
edges.get(B).add(new int[] {A, C});
}
visited = new boolean[N + 1];
result = new int[2];
dfs(1);
int answer = result[1] / T + (result[1] % T == 0 ? 0 : 1);
System.out.println(answer);
}
private static int[] dfs(int node) {
int[] ret = new int[2];
visited[node] = true;
ArrayList<int[]> edge = edges.get(node);
int[][] arr = new int[edge.size() + 1][2];
int[] next, tmp;
for (int i = 0; i < edge.size(); i++) {
next = edge.get(i);
if(!visited[next[0]]) {
tmp = dfs(next[0]);
arr[i][0] = tmp[0] + 1;
arr[i][1] = tmp[1] + next[1];
}
}
Arrays.sort(arr, (o1, o2) -> o1[0] == o2[0] ? o1[1] - o2[1] : o2[0] - o1[0]);
if(arr[0][0] + arr[1][0] == result[0] && arr[0][1] + arr[1][1] < result[1])
result[1] = arr[0][1] + arr[1][1];
else if(arr[0][0] + arr[1][0] > result[0]) {
result[0] = arr[0][0] + arr[1][0];
result[1] = arr[0][1] + arr[1][1];
}
ret[0] = arr[0][0];
ret[1] = arr[0][1];
return ret;
}
}
728x90
'Problem Solving > BOJ' 카테고리의 다른 글
[백준, BOJ 1414] 불우이웃돕기 (java) (0) | 2024.04.19 |
---|---|
[백준, BOJ 16434] 드래곤 앤 던전 (java) (1) | 2024.04.19 |
[백준, BOJ 1174] 줄어드는 수 (java) (1) | 2024.04.19 |
[백준, BOJ 10423] 전기가 부족해 (java) (1) | 2024.04.12 |
[백준, BOJ 12757] 전설의 JBNU (java) (0) | 2024.04.12 |