- Today
- Total
- ๋ฐฑ์๋
- ๋ฐฑ์ค
- ์ธํด
- ์๋ฃ๊ตฌ์กฐ
- CS
- Algorithm
- ์์์ ๋ ฌ
- OOP
- MST
- ๋ฒจ๋งํฌ๋
- dp
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์๋ฐ
- array
- tree
- ๋ค์ต์คํธ๋ผ
- PS
- ๊ตฌํ
- ์๋ฐ์์ ์
- database
- ์กธ์ ์ํ
- java
- BFS
- spring
- pytorch
- ๊ทธ๋ฆฌ๋
- ํ๋ก๊ทธ๋๋จธ์ค
- Graph
- ๋ฌธ๋ฒ
- leetcode
Partially Committed
[๋ฐฑ์ค 1753] ์ต๋จ๊ฒฝ๋ก (JAVA) ๋ณธ๋ฌธ
๋ฌธ์
https://www.acmicpc.net/problem/1753
๋ฐฉํฅ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ง๋ฉด ์ฃผ์ด์ง ์์์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ์ผ๋ก์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋จ, ๋ชจ๋ ๊ฐ์ ์ ๊ฐ์ค์น๋ 10 ์ดํ์ ์์ฐ์์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ V์ ๊ฐ์ ์ ๊ฐ์ E๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) ๋ชจ๋ ์ ์ ์๋ 1๋ถํฐ V๊น์ง ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๋ค๊ณ ๊ฐ์ ํ๋ค. ๋์งธ ์ค์๋ ์์ ์ ์ ์ ๋ฒํธ K(1 ≤ K ≤ V)๊ฐ ์ฃผ์ด์ง๋ค. ์ ์งธ ์ค๋ถํฐ E๊ฐ์ ์ค์ ๊ฑธ์ณ ๊ฐ ๊ฐ์ ์ ๋ํ๋ด๋ ์ธ ๊ฐ์ ์ ์ (u, v, w)๊ฐ ์์๋๋ก ์ฃผ์ด์ง๋ค. ์ด๋ u์์ v๋ก ๊ฐ๋ ๊ฐ์ค์น w์ธ ๊ฐ์ ์ด ์กด์ฌํ๋ค๋ ๋ป์ด๋ค. u์ v๋ ์๋ก ๋ค๋ฅด๋ฉฐ w๋ 10 ์ดํ์ ์์ฐ์์ด๋ค. ์๋ก ๋ค๋ฅธ ๋ ์ ์ ์ฌ์ด์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ์ด ์กด์ฌํ ์๋ ์์์ ์ ์ํ๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค๋ถํฐ V๊ฐ์ ์ค์ ๊ฑธ์ณ, i๋ฒ์งธ ์ค์ i๋ฒ ์ ์ ์ผ๋ก์ ์ต๋จ ๊ฒฝ๋ก์ ๊ฒฝ๋ก๊ฐ์ ์ถ๋ ฅํ๋ค. ์์์ ์์ ์ 0์ผ๋ก ์ถ๋ ฅํ๊ณ , ๊ฒฝ๋ก๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ์๋ INF๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค.
์์ ์ ๋ ฅ 1
5 6
1
5 1 1
1 2 2
1 3 3
2 3 4
2 4 5
3 4 6
์์ ์ถ๋ ฅ 1
0
2
3
7
INF
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค.
ArrayList<Node> graph [] ๋ฐฐ์ด์ ์ฃผ์ด์ง ๋ ธ๋์ ๊ฐ์ค์น๋ฅผ ์ ์ฅํ๊ณ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ์.
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉด ์์ ๋ ธ๋๋ถํฐ ๋ชจ๋ ๋ ธ๋ ๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ ๋ฐฐ์ด์ ๊ตฌํ ์ ์๋ค.
์ด๊ธฐ์๋ ์์ ๋ ธ๋๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ ธ๋์ ๋ํ ์ต๋จ ๊ฑฐ๋ฆฌ ๋ฐฐ์ด์ INF(0x7ffffff) ๋ก ์ด๊ธฐํํ๋ค.(์์๋ ธ๋๋ 0์ผ๋ก)
๊ทธ๋ฆฌ๊ณ ํ์ฌ ์ต๋จ ๊ฑฐ๋ฆฌ ๋ฐฐ์ด์์ ๊ฐ์ด ๊ฐ์ฅ ์์ ๋ ธ๋๋ฅผ ์ ํํ์ฌ, (์ด ๋ถ๋ถ์ ์ฐ์ ์์ํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํธํ๋ค.)
ํด๋น ๋ ธ๋์ ์ฐ๊ฒฐ๋ ์์ง๋ฅผ ํ์ํ์ฌ ๋ค๋ฅธ ๋ ธ๋๋ค์ ๊ฐ์ ์ ๋ฐ์ดํธํ๋ค.
์ ๋ฐ์ดํธ ์ ์ฑ ์ Min(์ ํํ ๋ ธ๋์ dist ๊ฐ , edge + ์ฐ๊ฒฐ๋ ๋ ธ๋์ dist ๊ฐ) ์ด๋ค.
import java.io.*;
import java.util.*;
public class Main {
static int INF = Integer.MAX_VALUE;
static ArrayList<Node> graph[];
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 stk = new StringTokenizer(br.readLine());
int v = Integer.parseInt(stk.nextToken()); // ๋
ธ๋ ๊ฐ์
int e = Integer.parseInt(stk.nextToken()); // ์์ง ๊ฐ์
stk = new StringTokenizer(br.readLine());
int start = Integer.parseInt(stk.nextToken()); // ์์์
graph = new ArrayList[v + 1];
for (int i = 1; i <= v; i++) {
graph[i] = new ArrayList<Node>();
}
for (int i = 0; i < e; i++) {
stk = new StringTokenizer(br.readLine());
int a = Integer.parseInt(stk.nextToken());
int b = Integer.parseInt(stk.nextToken());
int w = Integer.parseInt(stk.nextToken());
graph[a].add(new Node(b, w));
}
int[] dist = new int[v + 1];
boolean[] visited = new boolean[v + 1];
for (int i = 1; i <= v; i++) {
dist[i] = INF;
}
PriorityQueue<Node> q = new PriorityQueue<>();
q.offer(new Node(start, 0));
dist[start] = 0;
while (!q.isEmpty()) {
Node cur = q.poll();
if (visited[cur.toNode]) continue; // ์ด๋ฏธ ๋ฐฉ๋ฌธ?
visited[cur.toNode] = true;
for (int i = 0; i < graph[cur.toNode].size(); i++) {
Node t = graph[cur.toNode].get(i);
int next = t.toNode;
int val = t.e;
if (dist[next] > dist[cur.toNode] + val) {
dist[next] = dist[cur.toNode] + val;
q.add(new Node(next, dist[next]));
}
}
}
for (int i = 1; i <= v; i++) {
if (!visited[i])
bw.write("INF\n");
else bw.write(dist[i] + "\n");
}
br.close();
bw.flush();
bw.close();
}
static class Node implements Comparable<Node> {
int toNode;
int e;
public Node(int toNode, int e) {
this.toNode = toNode;
this.e = e;
}
public int compareTo(Node n) {
if (this.e > n.e)
return 1;
else
return -1;
}
}
}
'๐ฅ Algorithm || ๋ฌธ์ ํ์ด > PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 1854] K๋ฒ์งธ ์ต๋จ๊ฒฝ๋ก ์ฐพ๊ธฐ (JAVA) (0) | 2023.01.18 |
---|---|
[๋ฐฑ์ค 1916] ์ต์๋น์ฉ ๊ตฌํ๊ธฐ (JAVA) (0) | 2023.01.17 |
[๋ฐฑ์ค 1948] ์๊ณ๊ฒฝ๋ก (JAVA) (0) | 2023.01.17 |
[๋ฐฑ์ค 1516] ๊ฒ์ ๊ฐ๋ฐํ๊ธฐ (JAVA) (2) | 2023.01.17 |
[๋ฐฑ์ค 2252] ์ค ์ธ์ฐ๊ธฐ(JAVA) (0) | 2023.01.17 |