1240번: 노드사이의 거리
첫째 줄에 노드의 개수 $N$과 거리를 알고 싶은 노드 쌍의 개수 $M$이 입력되고 다음 $N-1$개의 줄에 트리 상에 연결된 두 점과 거리를 입력받는다. 그 다음 줄에는 거리를 알고 싶은 $M$개의 노드 쌍
www.acmicpc.net
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); // 노드의 개수
int M = Integer.parseInt(st.nextToken()); // 거리를 알고 싶은 노드 쌍의 개수
List<int[]>[] graph = new List[N + 1];
for (int i = 1; i <= N; i++) {
graph[i] = new ArrayList<>();
}
for (int i = 0; i < N - 1; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int d = Integer.parseInt(st.nextToken()); // 두 점의 거리
graph[a].add(new int[] {b, d});
graph[b].add(new int[] {a, d});
}
boolean[] visited = new boolean[N + 1];
Queue<int[]> q = new ArrayDeque<>();
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
Arrays.fill(visited, false);
q.clear();
visited[a] = true;
q.offer(new int[] {a, 0});
while (!q.isEmpty()) {
int[] info = q.poll();
int cur = info[0], distance = info[1];
if (cur == b) {
sb.append(distance).append("\n");
break;
}
for (int[] data : graph[cur]) {
int next = data[0], dist = data[1];
if (!visited[next]) {
q.offer(new int[] {next, distance + dist});
visited[next] = true;
}
}
}
}
System.out.print(sb);
}
}
728x90
'알고리즘 > 트리' 카테고리의 다른 글
[백준][JAVA] 14725번 개미굴 (0) | 2024.03.11 |
---|---|
[백준][JAVA] 9934번 완전 이진 트리 (0) | 2024.01.17 |
[백준][JAVA] 11438번 LCA 2 (1) | 2023.12.29 |
[백준][JAVA] 11437번 LCA (1) | 2023.12.28 |
[백준][JAVA] 15681번 트리와 쿼리 (0) | 2023.12.24 |