📙 Algorithm Solving/Java
📙[Algo] 24.04.17 알고리즘
혜덕hyeduck
2024. 4. 18. 00:21
알고리즘 문제) BOJ 1240. 노드사이의 거리
문제 요약
- N개의 노드와 M개의 두 노드 쌍이 주어질 때, 두 노드 사이 거리 출력하기
시간 제한
- 2초
입력
- 노드 개수 N, 거리를 알고 싶은 노드 쌍의 개수 M
- 2≤N≤1000
- 1≤M≤1000
- N-1개줄에 두 점과 거리를 입력 받음
- 거리는 1만 이하 자연수
- 마지막에 거리를 알고 싶은 M개의 노드 쌍이 한 쌍씩 입력 됨
출력
- M개의 줄에 차례대로 입력받은 두 노드 사이 거리 출력
코드
import java.io.*;
import java.util.*;
public class Main {
static int N, M;
static ArrayList<Node>[] list;
static int from, to, answer;
static class Node{
int no;
int dist;
Node(int no, int dist) {
this.no = no;
this.dist = dist;
}
}
static void dfs(int cur, int prv, int total) {
if (cur == to) {
answer = total;
return;
}
for (Node node : list[cur]) {
if (node.no == prv) continue;
dfs(node.no, cur, total + node.dist);
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
list = new ArrayList[N + 1];
for (int i = 0; i < N + 1; i++) {
list[i] = new ArrayList<>();
}
int v1, v2, d;
for (int i = 0; i < N - 1; i++) {
st = new StringTokenizer(br.readLine());
v1 = Integer.parseInt(st.nextToken());
v2 = Integer.parseInt(st.nextToken());
d = Integer.parseInt(st.nextToken());
list[v1].add(new Node(v2, d));
list[v2].add(new Node(v1, d));
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
from = Integer.parseInt(st.nextToken());
to = Integer.parseInt(st.nextToken());
answer = 0;
dfs(from, 0, 0);
sb.append(answer+"\\n");
}
bw.write(String.valueOf(sb));
bw.flush();
bw.close();
br.close();
}
}