- Today
- Total
- dp
- ์ธํด
- ๋ฐฑ์๋
- ์๋ฃ๊ตฌ์กฐ
- ๋ฒจ๋งํฌ๋
- Algorithm
- ์์์ ๋ ฌ
- OOP
- ๊ทธ๋ฆฌ๋
- ๋ฐฑ์ค
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- CS
- ๋ฌธ๋ฒ
- ๋ค์ต์คํธ๋ผ
- pytorch
- ๊ตฌํ
- database
- PS
- Graph
- array
- ์๋ฐ์์ ์
- leetcode
- ํ๋ก๊ทธ๋๋จธ์ค
- ์กธ์ ์ํ
- tree
- ์๋ฐ
- spring
- BFS
- java
- MST
Partially Committed
[๋ฐฑ์ค 1916] ์ต์๋น์ฉ ๊ตฌํ๊ธฐ (JAVA) ๋ณธ๋ฌธ
[๋ฐฑ์ค 1916] ์ต์๋น์ฉ ๊ตฌํ๊ธฐ (JAVA)
WonderJay 2023. 1. 17. 16:52๋ฌธ์
https://www.acmicpc.net/problem/1916
N๊ฐ์ ๋์๊ฐ ์๋ค. ๊ทธ๋ฆฌ๊ณ ํ ๋์์์ ์ถ๋ฐํ์ฌ ๋ค๋ฅธ ๋์์ ๋์ฐฉํ๋ M๊ฐ์ ๋ฒ์ค๊ฐ ์๋ค. ์ฐ๋ฆฌ๋ A๋ฒ์งธ ๋์์์ B๋ฒ์งธ ๋์๊น์ง ๊ฐ๋๋ฐ ๋๋ ๋ฒ์ค ๋น์ฉ์ ์ต์ํ ์ํค๋ ค๊ณ ํ๋ค. A๋ฒ์งธ ๋์์์ B๋ฒ์งธ ๋์๊น์ง ๊ฐ๋๋ฐ ๋๋ ์ต์๋น์ฉ์ ์ถ๋ ฅํ์ฌ๋ผ. ๋์์ ๋ฒํธ๋ 1๋ถํฐ N๊น์ง์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋์์ ๊ฐ์ N(1 ≤ N ≤ 1,000)์ด ์ฃผ์ด์ง๊ณ ๋์งธ ์ค์๋ ๋ฒ์ค์ ๊ฐ์ M(1 ≤ M ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์งธ ์ค๋ถํฐ M+2์ค๊น์ง ๋ค์๊ณผ ๊ฐ์ ๋ฒ์ค์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. ๋จผ์ ์ฒ์์๋ ๊ทธ ๋ฒ์ค์ ์ถ๋ฐ ๋์์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ค์์๋ ๋์ฐฉ์ง์ ๋์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๊ณ ๋ ๊ทธ ๋ฒ์ค ๋น์ฉ์ด ์ฃผ์ด์ง๋ค. ๋ฒ์ค ๋น์ฉ์ 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 100,000๋ณด๋ค ์์ ์ ์์ด๋ค.
๊ทธ๋ฆฌ๊ณ M+3์งธ ์ค์๋ ์ฐ๋ฆฌ๊ฐ ๊ตฌํ๊ณ ์ ํ๋ ๊ตฌ๊ฐ ์ถ๋ฐ์ ์ ๋์๋ฒํธ์ ๋์ฐฉ์ ์ ๋์๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ์ถ๋ฐ์ ์์ ๋์ฐฉ์ ์ ๊ฐ ์ ์๋ ๊ฒฝ์ฐ๋ง ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ถ๋ฐ ๋์์์ ๋์ฐฉ ๋์๊น์ง ๊ฐ๋๋ฐ ๋๋ ์ต์ ๋น์ฉ์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
5
8
1 2 2
1 3 3
1 4 1
1 5 10
2 4 2
3 4 1
3 5 1
4 5 3
1 5
์์ ์ถ๋ ฅ 1 ๋ณต์ฌ
4
๊ฐ์ค์น๊ฐ ์์์ด๋ฏ๋ก , ๋จ์ํ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๋ฉด ๋๋ค.
์ฃผ์ด์ง ์ต๋ ๋ ธ๋์ ๊ฐ์๋ 1000 ์ด๊ณ ์์ง์ ๊ฐ์ ๋ํ ์ต๋ 100,000 ์ด๋ฏ๋ก
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๋ O(ElogV) = O(10,000 * 3) ์ผ๋ก ์๋นํ ๋๋ํ๋ค!
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด์ ๊ฐ๊ฐ์ ๋ ธ๋๊น์ง์ ์ต๋จ ๋น์ฉ์ ๊ณ์ฐํ ๋ค์์, ๋์ฐฉ ๋์์ ๋ํ ๋น์ฉ์ ์ถ๋ ฅํ์.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
static ArrayList<Node>[] graph;
static final int INF = Integer.MAX_VALUE;
static boolean[] visited;
static int[] dist;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk;
int n = Integer.parseInt(br.readLine());
int m = Integer.parseInt(br.readLine());
graph = new ArrayList[n + 1];
for (int i = 0; i <= n; i++)
graph[i] = new ArrayList<Node>();
dist = new int[n + 1];
Arrays.fill(dist, INF);
for (int i = 0; i < m; i++) {
stk = new StringTokenizer(br.readLine());
int a = Integer.parseInt(stk.nextToken());
int b = Integer.parseInt(stk.nextToken());
int e = Integer.parseInt(stk.nextToken());
graph[a].add(new Node(b, e));
}
stk = new StringTokenizer(br.readLine());
int start = Integer.parseInt(stk.nextToken());
int end = Integer.parseInt(stk.nextToken());
visited = new boolean[n + 1];
dijkstra(start, end);
System.out.println(dist[end]);
}
public static void dijkstra(int start, int end) {
PriorityQueue<Node> pq = new PriorityQueue<>();
pq.offer(new Node(start, 0));
dist[start] = 0;
while (!pq.isEmpty()) {
Node now = pq.poll();
if (!visited[now.toNode]) {
visited[now.toNode] = true;
for (Node cur : graph[now.toNode]) {
if (!visited[cur.toNode] && dist[cur.toNode] > dist[now.toNode] + cur.w) {
dist[cur.toNode] = dist[now.toNode] + cur.w;
pq.offer(new Node(cur.toNode, dist[cur.toNode]));
}
}
}
}
}
static class Node implements Comparable<Node> {
int toNode;
int w;
public Node(int toNode, int w) {
this.toNode = toNode;
this.w = w;
}
@Override
public int compareTo(Node v) {
return this.w - v.w;
}
}
}
'๐ฅ Algorithm || ๋ฌธ์ ํ์ด > PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 11657] ํ์๋จธ์ (JAVA) (0) | 2023.01.18 |
---|---|
[๋ฐฑ์ค 1854] K๋ฒ์งธ ์ต๋จ๊ฒฝ๋ก ์ฐพ๊ธฐ (JAVA) (0) | 2023.01.18 |
[๋ฐฑ์ค 1753] ์ต๋จ๊ฒฝ๋ก (JAVA) (1) | 2023.01.17 |
[๋ฐฑ์ค 1948] ์๊ณ๊ฒฝ๋ก (JAVA) (0) | 2023.01.17 |
[๋ฐฑ์ค 1516] ๊ฒ์ ๊ฐ๋ฐํ๊ธฐ (JAVA) (2) | 2023.01.17 |