728x90
https://www.acmicpc.net/problem/13905
13905번: 세부
첫 번째 줄에는 섬에 존재하는 집의 수 N(2≤N≤100,000)와 다리의 수 M(1≤M≤300,000)이 주어진다. 두 번째 줄에는 숭이의 출발 위치(s)와 혜빈이의 위치(e)가 주어진다. (1≤s, e≤N, s≠e). 다음 M개의 줄
www.acmicpc.net
728x90
메모리: 128,500 KB , 시간: 908 ms
사용 알고리즘: 데이크스트라, 그래프 탐색, 그래프 이론, 분리 집합, 자료 구조
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
int s = Integer.parseInt(st.nextToken());
int e = Integer.parseInt(st.nextToken());
// 다리 정보
ArrayList<ArrayList<int[]>> edges = new ArrayList<>();
for (int i = 0; i <= N; i++) {
edges.add(new ArrayList<>());
}
int h1, h2, k;
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
h1 = Integer.parseInt(st.nextToken());
h2 = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
edges.get(h1).add(new int[] {h2, k});
edges.get(h2).add(new int[] {h1, k});
}
// 다익스트라로 최대 무게 구하기
PriorityQueue<int[]> pq = new PriorityQueue<>((o1, o2) -> o2[1] - o1[1]); // 무게 내림차순
pq.add(new int[] {s, 1_000_001});
// 각 섬에 들고 올 수 있는 최대 개수
int[] visited = new int[N + 1];
visited[s] = 1_000_001;
int[] now, next;
ArrayList<int[]> edge;
int result = 0;
while(!pq.isEmpty()) {
now = pq.poll();
if(now[0] == e) {
result = now[1];
break;
}
if(visited[now[0]] > now[1]) continue;
edge = edges.get(now[0]);
for (int i = 0; i < edge.size(); i++) {
next = edge.get(i);
if(visited[next[0]] < Math.min(now[1], next[1])) {
visited[next[0]] = Math.min(now[1], next[1]);
pq.add(new int[] {next[0], visited[next[0]]});
}
}
}
System.out.println(result);
}
}
728x90
'Problem Solving > BOJ' 카테고리의 다른 글
[백준, BOJ 5972] 택배 배송 (java) (1) | 2024.02.10 |
---|---|
[백준, BOJ 5549] 행성 탐사 (java) (1) | 2024.02.10 |
[백준, BOJ 17179] 케이크 자르기 (java) (0) | 2024.02.09 |
[백준, BOJ 20955] 민서의 응급 수술 (java) (1) | 2024.02.09 |
[백준, BOJ 1766] 문제집 (java) (0) | 2024.02.04 |