https://steady-coding.tistory.com/106
[BOJ] 백준 1238번 : 파티 (JAVA)
문제 N개의 숫자로 구분된 각각의 마을에 한 명의 학생이 살고 있다. 어느 날 이 N명의 학생이 X (1 ≤ X ≤ N)번 마을에 모여서 파티를 벌이기로 했다. 이 마을 사이에는 총 M개의 단방향 도로들이
steady-coding.tistory.com
https://m.blog.naver.com/ndb796/221234424646
23. 다익스트라(Dijkstra) 알고리즘
다익스트라(Dijkstra) 알고리즘은 다이나믹 프로그래밍을 활용한 대표적인 최단 경로(Shortest P...
blog.naver.com
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
class Node implements Comparable<Node>{
int to, time;
Node(int to, int time) {
this.time = time;
this.to = to;
}
public int compareTo(Node n) {
return Integer.compare(this.time, n.time);
}
}
public class Main {
public static void main(String[] args) throws Exception {
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());
int X = Integer.parseInt(st.nextToken());
ArrayList<ArrayList<Node>> list = new ArrayList<>();
ArrayList<ArrayList<Node>> reverse_list = new ArrayList<>();
for(int i = 0; i <= N; i++) {
list.add(new ArrayList<>());
reverse_list.add(new ArrayList<>());
}
for(int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine(), " ");
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int t = Integer.parseInt(st.nextToken());
list.get(a).add(new Node(b,t));
reverse_list.get(b).add(new Node(a,t));
}
int[] dist = Dijkstra(list,X,N);
int[] dist1 = Dijkstra(reverse_list, X, N);
int ans = 0;
for(int i = 1; i <= N; i++) {
ans = Math.max(ans, dist[i] + dist1[i]);
}
System.out.println(ans);
}
static int[] Dijkstra(ArrayList<ArrayList<Node>> list, int X, int N) {
PriorityQueue<Node> prque = new PriorityQueue<>();
int[] dis = new int[N+1];
Arrays.fill(dis, Integer.MAX_VALUE);
dis[X] = 0;
prque.add(new Node(X,0));
while(!prque.isEmpty()) {
Node n = prque.poll();
for(Node t : list.get(n.to)) {
if(t.time+n.time < dis[t.to]) {
prque.add(new Node(t.to, t.time+n.time));
dis[t.to] = t.time+n.time;
}
}
}
return dis;
}
}
'백준' 카테고리의 다른 글
[백준] 2225 합분해 [자바] (0) | 2023.03.03 |
---|---|
[백준] 26607 시로코와 은행털기 [자바] (0) | 2023.01.29 |
[백준] 10830 행렬 제곱 [자바] (0) | 2023.01.16 |
[백준] 27115 통신소 [자바] (0) | 2023.01.15 |
[백준] 27114 조교의 맹연습 [자바] (0) | 2023.01.12 |