๋ฌธ์ (Gold 3)
https://www.acmicpc.net/problem/1238
1238๋ฒ: ํํฐ
์ฒซ์งธ ์ค์ N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ ๋ ฅ๋๋ค. ๋ ๋ฒ์งธ ์ค๋ถํฐ M+1๋ฒ์งธ ์ค๊น์ง i๋ฒ์งธ ๋๋ก์ ์์์ , ๋์ , ๊ทธ๋ฆฌ๊ณ ์ด ๋๋ก๋ฅผ ์ง๋๋๋ฐ ํ์ํ ์์์๊ฐ Ti๊ฐ ๋ค์ด
www.acmicpc.net
ํ์ด
๋ง์๋ค์ธ N์์ ๋ชฉ์ ์ง X๊น์ง ๊ฑธ๋ฆฌ๋ ์ต๋จ๊ฑฐ๋ฆฌ -> A
๋ชฉ์ ์ง X์์ ๊ฐ ๋ง์ N๊น์ง ๊ฑธ๋ฆฌ๋ ์ต๋จ๊ฑฐ๋ฆฌ -> B
๋ฅผ ์ด์ฉํด์ ์๋ณต ๊ฑฐ๋ฆฌ์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ค!
B๋ ์ถ๋ฐ์ง๋ก๋ถํฐ ๋ชจ๋ ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉ
A์ ๊ฒฝ์ฐ, ๋ชจ๋ ๋ ธ๋์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ค๋ ํ๋ก์ด๋ ์์ฌ์ ์ด์ฉํ๋ ค ํ์๋ค.
ํ์ง๋ง, ํ๋ก์ด๋ ์์ฌ์ ๊ฒฝ์ฐ ์๊ฐ์ด๊ณผ๋ก ์คํจ!
๊ทธ๋ ๋ค๋ฉด ๋ฐ๋๋ก ์๊ฐํด์,
๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋๋ก ์ ์ฅํ ํ์ ์ถ๋ฐ์ง X๋ก๋ถํฐ ๊ฐ ๋ง์ N๊น์ง ๊ฑธ๋ฆฌ๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ฉด ๋๋ค!!!!!!
( ์ด ๋ถ๋ถ๊น์ง ์๊ฐํ๊ธฐ๊ฐ ๋งค์ฐ ์ค๋ ๊ฑธ๋ ธ๋ค ใ
ใ
)
์ฆ, A,B ๋ชจ๋ ๊ธฐ๋ณธ ๋ค์ต์คํธ๋ผ๋ฅผ ํตํด์ ๊ตฌํ๋ฉด ๋๋ ๊ฐ๋จํ ๋ฌธ์ !
์ฝ๋
package shortestPath;
import java.util.*;
import java.io.*;
public class BOJ_1238_ํํฐ {
static int N,X;
static List<int[]>[] road;
static List<int[]>[] road_back;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
X = Integer.parseInt(st.nextToken())-1;
road = new List[N]; // X์์ N ๋ง์๋ก ๊ฐ๋ ๊ฒฝ๋ก ํ๋ณํ ๋
road_back = new List[N]; // N ๋ง์๋ค์์ X๋ก ๊ฐ๋ ๊ฒฝ๋ก ํ๋ณํ ๋
for(int i =0 ; i < N ; i++){
road[i] = new ArrayList<>();
road_back[i] = new ArrayList<>();
}
for(int i =0 ; i < M ; i++){
st = new StringTokenizer(br.readLine());
int to = Integer.parseInt(st.nextToken())-1;
int from = Integer.parseInt(st.nextToken())-1;
int time = Integer.parseInt(st.nextToken());
road[to].add(new int[]{from, time});
road_back[from].add(new int[]{to, time});
}
int[] XToN = getDist(road);
int[] NToX = getDist(road_back);
int max = 0;
for(int i =0 ; i < N ; i++){
max = Math.max(max, XToN[i]+NToX[i]);
}
System.out.println(max);
}
private static int[] getDist(List<int[]>[] road) {
int[] dist = new int[N];
Arrays.fill(dist, Integer.MAX_VALUE);
PriorityQueue<int[]> pq = new PriorityQueue<>(((o1, o2) -> Integer.compare(o1[1], o2[1])));
boolean[] visited = new boolean[N];
pq.offer(new int[]{X, 0});
dist[X] = 0;
while(!pq.isEmpty()){
int[] cur = pq.poll();
if(visited[cur[0]]) continue; // ์ด๋ฏธ ๊ฒฝ๋ก ํ์์ด ๋์ด์์ผ๋ฉด ํ์ธํ ํ์ ์์
visited[cur[0]] = true;
for(int[] r:road[cur[0]]){
if(dist[r[0]] > dist[cur[0]] + r[1]){ // ํ์ฌ ๋
ธ๋๋ฅผ ๋ค๋ ธ๋ค ๊ฐ ๋๊ฐ ๋ ๋น ๋ฅผ ๊ฒฝ์ฐ
dist[r[0]] = dist[cur[0]] + r[1];
pq.add(new int[]{r[0], dist[r[0]]});
}
}
}
return dist;
}
}
'๐ ์๊ณ ๋ฆฌ์ฆ > ShortestPath' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LeetCode] 1091. Shortest Path in Binary Matrix (ํด์, Kotlin ํ์ด) (0) | 2023.06.19 |
---|---|
[๋ฐฑ์ค] 13549๋ฒ: ์จ๋ฐ๊ผญ์ง3 (0) | 2022.04.03 |
[๋ฐฑ์ค]11780๋ฒ ํ๋ก์ด๋2 (Java) (0) | 2022.02.21 |
[๋ฐฑ์ค] 16118๋ฒ ๋ฌ๋น์ฌ์ฐ (Java) (0) | 2022.02.08 |
[๋ฐฑ์ค] 1753๋ฒ ์ต๋จ๊ฒฝ๋ก (Java) (0) | 2021.08.24 |