๐ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/20183
โธ ๋ฌธ์
์์ฏ์ ํธ์์ด๋ ๊ณจ๋ชฉ ๋์ฅ์ ์ถ์ ์ด์๋ค. ํธ์์ด๊ฐ ์ด๋ ๋ง์์ N ๊ฐ์ ๊ต์ฐจ๋ก์ M ๊ฐ์ ๊ณจ๋ชฉ์ด ์์๋ค. ๊ต์ฐจ๋ก์ ๋ฒํธ๋ 1๋ฒ๋ถํฐ N ๋ฒ๊น์ง๋ก ํํํ๋ค. ๊ณจ๋ชฉ์ ์๋ก ๋ค๋ฅธ ๋ ๊ต์ฐจ๋ก๋ฅผ ์๋ฐฉํฅ์ผ๋ก ์ด์ด์ฃผ๋ฉฐ ์์์ ๋ ๊ต์ฐจ๋ก๋ฅผ ์๋ ๊ณจ๋ชฉ์ ์ต๋ ํ ๊ฐ๋ง ์กด์ฌํ๋ค. ๋ถ์ ์ ์ ์ฐ๋ ํธ์์ด๋ ๋ชจ๋ ๊ณจ๋ชฉ์ ์์ ์ ๋ถ์ ์ ๋์๊ณ , ๊ณจ๋ชฉ๋ง๋ค ํต๊ณผํ๋ ์ฌ๋์๊ฒ ์๊ธํ ๊ฒ์ด๋ค. ์๊ธํ๋ ์๊ธ์ ๊ณจ๋ชฉ๋ง๋ค ๋ค๋ฅผ ์ ์๋ค.
๋น์ ์ A ๋ฒ ๊ต์ฐจ๋ก์์ B ๋ฒ ๊ต์ฐจ๋ก๊น์ง C ์์ ๊ฐ์ง๊ณ ๊ฐ๋ ค๊ณ ํ๋ค. ํธ์์ด์ ํกํฌ๋ฅผ ๋ณด๋ฉฐ ์ง์ฆ์ ๋์ง๋ง, ๋ถ์ ์ ์ ์ด๊ฒจ๋ผ ๋ฐฉ๋ฒ์ด ์์ด์ ๋์ ๋ด๊ณ ๊ฐ๋ ค๊ณ ํ๋ค. ํ์ง๋ง ์ด์ ์ง๋๊ฐ ๊ฑฐ๋ฉด, ์ต์ํ์ ์์น์ฌ์ ๋ฐ๊ณ ์ถ๋ค. ๋น์ ์ด ๋ฐ๋ ์์น์ฌ์ ๊ฒฝ๋ก ์์์ ๊ฐ์ฅ ๋ง์ด ๋ธ ๋์ ๋น๋กํ๊ธฐ ๋๋ฌธ์, ๊ฒฐ๊ตญ ๊ฐ ์ ์๋ ๋ค์ํ ๋ฐฉ๋ฒ๋ค ์ค์์ ์ต์ํ์ ์์น์ฌ์ ๋ฐ์ผ๋ ค๊ณ ํ๋ค. ์ฆ, ํ ๊ณจ๋ชฉ์์ ๋ด์ผ ํ๋ ์ต๋ ์๊ธ์ ์ต์ํํ๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด, ์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด 5๊ฐ์ ๊ต์ฐจ๋ก์ 5๊ฐ์ ๊ณจ๋ชฉ์ด ์์ผ๋ฉฐ, ๋น์ ์ด 1๋ฒ ๊ต์ฐจ๋ก์์ 3๋ฒ ๊ต์ฐจ๋ก๋ก ๊ฐ๊ณ ์ถ์ ์ํฉ์ด๋ผ๊ณ ํ์. ๋ง์ฝ 10์์ ๋ค๊ณ ์ถ๋ฐํ๋ค๋ฉด 2๊ฐ์ง ๊ฒฝ๋ก๋ก ๊ฐ ์ ์๋ค. 1๋ฒ -> 2๋ฒ -> 3๋ฒ ๊ต์ฐจ๋ก๋ก ์ด๋ํ๊ฒ ๋๋ฉด ์ด 10์์ด ํ์ํ๊ณ ์ด ๊ณผ์ ์์ ์ต๋ ์๊ธ์ก์ 5์์ด์๊ณ , 1๋ฒ -> 4๋ฒ -> 5๋ฒ -> 3๋ฒ ๊ต์ฐจ๋ก๋ก ์ด๋ํ๊ฒ ๋๋ฉด ์ด 8์์ด ํ์ํ๋ฉฐ ์ต๋ ์๊ธ์ก์ 6์์ด ๋๋ค. ์ต์ํ์ ์์น์ฌ์ ์ป๋ ๊ฒฝ๋ก๋ ์ต๋ ์๊ธ์ก์ด 5์ธ ๊ฒฝ๋ก์ด๋ค. ํ์ง๋ง ๋ง์ฝ 8์๋ฐ์ ์๋ค๋ฉด, ์ ์์ ๊ฒฝ๋ก๋ ๊ฐ ์ ์๊ธฐ ๋๋ฌธ์ ์ต๋ ์๊ธ์ก์ด 6์์ธ ๊ฒฝ๋ก๋ก ๊ฐ์ผ ํ๋ ๊ฒ์ด ์ต์ ์ด๋ค.
๋น์ ์ ์์ ์์ ๋ฅผ ํตํด์, ์์น์ฌ์ ์ค์ด๊ณ ์ถ์ ์๋ก ๊ฐ๊ฑฐ๋ ๋ ๋ง์ ๋์ด ํ์ํ๊ณ , ์์น์ฌ์ ๋ ๋ฐ๋ ๊ฒ์ ๊ฐ์ํ๋ฉด ๊ฐ๊ฑฐ๋ ๋ ์ ์ ๋์ด ํ์ํ๊ฒ ๋๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค. ๋ง์์ ์ง๋์ ๊ณจ๋ชฉ๋ง๋ค ์กด์ฌํ๋ ํธ์์ด๊ฐ ์๊ธํ๋ ๊ธ์ก์ ์๋ค๋ฉด, ๋น์ ์ด ํ ๊ณจ๋ชฉ์์ ๋ด์ผํ๋ ์ต๋ ์๊ธ์ ์ต์๊ฐ์ ๊ณ์ฐํ์. ๋ง์ฝ ์ง๊ธ ๊ฐ์ง ๋์ผ๋ก๋ ์ ๋๋ก ๋ชฉํ ์ง์ ์ ๊ฐ ์ ์๋ค๋ฉด -1 ์ ์ถ๋ ฅํ๋ผ.
โธ ์ ๋ ฅ
์ฒซ ์ค์ ๊ต์ฐจ๋ก ๊ฐ์ N, ๊ณจ๋ชฉ ๊ฐ์ M, ์์ ๊ต์ฐจ๋ก ๋ฒํธ A, ๋์ฐฉ ๊ต์ฐจ๋ก ๋ฒํธ B, ๊ฐ์ง ๋ C ๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. ์ด์ด์ M ๊ฐ์ ์ค์ ๊ฑธ์ณ์ ๊ฐ ๊ณจ๋ชฉ์ด ์๋ ๊ต์ฐจ๋ก 2๊ฐ์ ๋ฒํธ์, ๊ณจ๋ชฉ์ ์๊ธ์ก์ด ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. ๊ฐ์ ๊ต์ฐจ๋ก๋ฅผ ์๋ ๊ณจ๋ชฉ์ ์ต๋ ํ ๋ฒ๋ง ์ฃผ์ด์ง๋ฉฐ, ๊ณจ๋ชฉ์ ์๋ฐฉํฅ์ด๋ค.
โธ ์ถ๋ ฅ
ํธ์์ด๊ฐ ์งํค๊ณ ์๋ ๊ณจ๋ชฉ๋ค์ ํตํด์ ์์ ๊ต์ฐจ๋ก์์ ๋์ฐฉ ๊ต์ฐจ๋ก๊น์ง C ์ ์ดํ๋ก ๊ฐ๋ ๊ฒฝ๋ก๋ค ์ค์, ์ง๋๋ ๊ณจ๋ชฉ์ ์๊ธ์ ์ต๋๊ฐ์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ผ. ๋ง์ฝ ๊ฐ ์ ์๋ค๋ฉด -1์ ์ถ๋ ฅํ๋ค.
โธ ์ ํ
1 ≤ N ≤ 100,000
1 ≤ M ≤ 500,000
1 ≤ C ≤ 1014
1 ≤ ๊ณจ๋ชฉ ๋ณ ์๊ธ์ก ≤ 109
1 ≤ A, B ≤ N, A ≠ B
๊ณจ๋ชฉ์ด ์๋ ๊ต์ฐจ๋ก์ ๋ฒํธ๋ ์๋ก ๋ค๋ฅด๋ค.
๐ ๋ฌธ์ ์ ๋ณด
- ๐ฅ ๋ฌธ์ ๋ ๋ฒจ : ๊ณจ๋ 2
- ๐ ๋ฌธ์ ์ ํ : ๊ทธ๋ํ ์ด๋ก , ์ด๋ถ ํ์, ์ต๋จ ๊ฒฝ๋ก, ๋ฐ์ดํฌ์คํธ๋ผ, ๋งค๊ฐ ๋ณ์ ํ์
- ๐ฌ ํ์ด ์ธ์ด : JAVA
๐ค ๋ฌธ์ ํ์ด
๋ค์ต์คํธ๋ผ๋ง ์๊ณ ๋ฆฌ์ฆ๋ง์ผ๋ก๋ ํด๊ฒฐํ ์ ์๊ณ , ๋ค์ต์คํธ๋ผ์ ์ด๋ถ ํ์์ ์กฐํฉํ์ฌ ํด๊ฒฐํ ์๋ ์๋ค.
์ด ๋ฌธ์ ๋ ํ ๊ณจ๋ชฉ์์ ๋ด์ผ ํ๋ ์ต๋ ์๊ธ์ก์ ์ต์๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
ํนํ, ์์น์ฌ์ ๊ฒฝ๋ก ์์์ ๊ฐ์ฅ ๋ง์ด ๋ธ ๋๊ณผ ๋น๋กํ๋ฏ๋ก, ์ด๋ฅผ ์ต์ํํ๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๊ฒ์ด ๋ชฉํ๋ค.
๋จผ์ , ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ๋ณด์.
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ๋ณดํต ์ต์ ๋น์ฉ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋๋ฐ ์ฌ์ฉ๋์ง๋ง, ์ด ๋ฌธ์ ์์๋ ๊ฒฝ๋ก ์์์ ๊ฐ์ฅ ํฐ ์์น์ฌ์ ์ต์ํํ๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ์์ผ ํ๋ค. ์ด๋ฅผ ์ํด ์์น์ฌ์ ์ต๋๊ฐ์ด ์์ ๊ฒฝ๋ก๋ฅผ ์ฐ์ ์ ์ผ๋ก ํ์ํ ์ ์๋๋ก ์ ๋ ฌ ๊ธฐ์ค์ ์ค์ ํ์๋ค.
์์ ๊ต์ฐจ๋ก a์์ ์ถ๋ฐํ์ฌ ์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํด ํ์์ ์งํํ๋ค.
์ด๋, ๊ฐ ๊ฒฝ๋ก์์์ ์์น์ฌ์ ํ์ฌ๊น์ง์ ์ต๋ ์์น์ฌ๊ณผ ์๋ก ์ด๋ํ ๊ณจ๋ชฉ์ ์๊ธ ์ค ํฐ ๊ฐ์ผ๋ก ๊ฐฑ์ ํ๋ค.
๋ชจ๋ ๊ต์ฐจ๋ก์ ๋ํ ์์น์ฌ์ ์ต๋๊ฐ์ dist ๋ฐฐ์ด์ ์ ์ฅํ๋ฉฐ, ๋ ๋์ ์์น์ฌ ๊ฒฝ๋ก๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ํ์ ์ถ๊ฐํด ์ค๋ค.
๋ํ, ๋์ ์๊ธ์ด ๊ฐ์ง ๋ c๋ฅผ ์ด๊ณผํ๋ฉด ํด๋น ๊ฒฝ๋ก๋ ํ์ํ์ง ์๋๋ค.
ํ์ ์ค ๋์ฐฉ ๊ต์ฐจ๋ก b์ ๋๋ฌํ๋ฉด, ํด๋น ๊ฒฝ๋ก์ ์์น์ฌ ์ต๋๊ฐ์ ๋ฐํํ๋ค.
๋ง์ฝ ์ฐ์ ์์ ํ๋ฅผ ๋ชจ๋ ํ์ํ ๋ค์๋ ๋์ฐฉ ๊ต์ฐจ๋ก์ ๋์ฐฉํ์ง ๋ชปํ๋ฉด -1์ ์ถ๋ ฅํ๋ค.
๋ ๋ฒ์งธ๋ก๋ ๋ค์ต์คํธ๋ผ์ ์ด๋ถ ํ์์ ์กฐํฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ๋ณด์.
๋จผ์ , ์ด๋ถ ํ์์ ์งํํ๊ธฐ ์ํด ์์น์ฌ์ ๋ฒ์๋ฅผ ์ค์ ํ๋ค. (์ต์ ์์น์ฌ = 1, ์ต๋ ์์น์ฌ = 1,000,000,000)
๊ทธ๋ค์, ์ค๊ฐ๊ฐ(mid)์ ๊ธฐ์ค์ผ๋ก ํ ๊ณจ๋ชฉ์์ ํ์ฉ ๊ฐ๋ฅํ ์ต๋ ์์น์ฌ์ ์ค์ ํ๊ณ , ๋ค์ต์คํธ๋ผ๋ฅผ ์ฌ์ฉํ์ฌ mid ์ดํ์ ์์น์ฌ์ผ๋ก๋ง ์์ ๊ต์ฐจ๋ก์์ ๋ชฉํ ๊ต์ฐจ๋ก๊น์ง ์ด๋ ๊ฐ๋ฅํ์ง ํ์ํ๋ค. ์ด ๊ณผ์ ์์ ์์น์ฌ์ด mid๋ฅผ ์ด๊ณผํ๋ ๊ณจ๋ชฉ์ ํ์ ๋์์์ ์ ์ธํ๋ค.
ํ์ ๊ฒฐ๊ณผ, ๋์ ๋น์ฉ์ด ๊ฐ์ง ๋ c๋ฅผ ์ด๊ณผํ๋ ๊ฒฝ์ฐ, ํ์ฌ mid ๊ฐ์ผ๋ก๋ ๋ชฉํ ๊ต์ฐจ๋ก์ ๋๋ฌํ ์ ์์์ ์๋ฏธํ๋ฏ๋ก ๋ ํฐ ์์น์ฌ ๊ฐ์ ํ์ํ๋ค.
๋ฐ๋๋ก, ์ด๋์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ์๋ ๋ ์์ mid ๊ฐ์ ํ์ํ์ฌ ์์น์ฌ์ ์ต๋๊ฐ์ ์ค์ธ๋ค.
์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด์, ๋ชฉํ ๊ต์ฐจ๋ก์ ๋๋ฌ ๊ฐ๋ฅํ ์ต์ ์์น์ฌ์ ์ต๋๊ฐ์ ์ฐพ๋๋ค.
๋ค์ต์คํธ๋ผ์ ์ด๋ถ ํ์์ ์กฐํฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋, ๋ฌธ์ ์ ์ฃผ์ด์ง ์ ๋ ฅ ๊ฐ์ ๋ฒ์๋ฅผ ์ ํ์ธํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ ๋ฒ์๋ฅผ ์ ์ ํ๊ฒ ์ค์ ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
๋ ๊ฐ์ง ํ์ด๋ฅผ ์ฝ๋๋ก ๊ฐ๊ฐ ์์ฑํด ๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
โ ์ต์ข ์ฝ๋ - ๋ค์ต์คํธ๋ผ
๋ฉ๋ชจ๋ฆฌ : 223584KB
์๊ฐ : 932ms
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 int n, m, a, b;
static long c;
static ArrayList<ArrayList<Pos>> list;
static public class Pos implements Comparable<Pos> {
int end; long dist; long shy;
public Pos(int end, long dist) {
this.end = end; this.dist = dist;
}
public Pos(int end, long dist, long shy) {
this.end = end; this.dist = dist; this.shy = shy;
}
// ์์น์ฌ์ด ์์ ๊ฒ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ
@Override
public int compareTo(Pos o) {
return Long.compare(this.shy, o.shy);
}
}
static final Long INF = Long.MAX_VALUE;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken()); // ๊ต์ฐจ๋ก ๊ฐ์
m = Integer.parseInt(st.nextToken()); // ๊ณจ๋ชฉ ๊ฐ์
a = Integer.parseInt(st.nextToken()); // ์์ ๊ต์ฐจ๋ก ๋ฒํธ
b = Integer.parseInt(st.nextToken()); // ๋์ฐฉ ๊ต์ฐจ๋ก ๋ฒํธ
c = Long.parseLong(st.nextToken()); // ๊ฐ์ง ๋
list = new ArrayList<>();
for (int i = 0; i <= n; i++) {
list.add(new ArrayList<>());
}
int u, v, w;
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
u = Integer.parseInt(st.nextToken());
v = Integer.parseInt(st.nextToken());
w = Integer.parseInt(st.nextToken());
// ์๋ฐฉํฅ ๋๋ก
list.get(u).add(new Pos(v, w));
list.get(v).add(new Pos(u, w));
}
System.out.println(dijkstra(a)); // ์์ ๊ต์ฐจ๋ก
}
private static long dijkstra(int a) {
PriorityQueue<Pos> pq = new PriorityQueue<>();
pq.offer(new Pos(a, 0, 0));
long[] dist = new long[n+1]; // ๊ฐ์ฅ ์์ ์์น์ฌ์ ์ต๋๊ฐ
Arrays.fill(dist, INF);
dist[a] = 0;
while (!pq.isEmpty()) {
Pos now = pq.poll();
// ๋์ฐฉ์
if (now.end == b) return dist[b];
// ์ด๋ฏธ ์ ์ฅ๋ ์ต์ ์ ๊ฒฝ๋ก๋ณด๋ค ๋ ํฐ ๋น์ฉ์ ์ ๋ฐํ๋ ๊ฒฝ์ฐ
// ํ์ฌ ๊ฒฝ๋ก๋ฅผ ํ์ ํ ํ์ ์์
// ์ฆ, ํ์ฌ ์์น์ ๊ฐ์ฅ ์์ ์์น์ฌ์ ์ต๋๊ฐ์ ๊ตฌํ์ผ๋ฏ๋ก
// now.shy ๊ฐ์ด ๋ ํฌ๋ค๋ฉด ํ์ํ ํ์ X
if (dist[now.end] < now.shy) continue;
for (Pos next : list.get(now.end)) {
// ์์งํ ๋ ๋ณด๋ค ๋์ ์ง๋ถ ๊ธ์ก์ด ํฌ๋ค๋ฉด ๊ฐ ์ ์์
if (now.dist + next.dist > c) continue;
// ๊ฒฝ๋ก์์ ์์น์ฌ ์ต๋๊ฐ ๊ฐฑ์
if (dist[next.end] > Math.max(dist[now.end], next.dist)) {
dist[next.end] = Math.max(dist[now.end], next.dist);
pq.offer(new Pos(next.end, now.dist + next.dist, dist[next.end]));
}
}
}
// ๊ฐ ์ ์๋ค๋ฉด
return -1;
}
}
โ ์ต์ข ์ฝ๋ - ๋ค์ต์คํธ๋ผ + ์ด๋ถํ์
๋ฉ๋ชจ๋ฆฌ : 344488KB
์๊ฐ : 3844ms
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 int n, m, a, b;
static long c;
static ArrayList<ArrayList<Pos>> list;
static public class Pos implements Comparable<Pos> {
int end; long dist;
public Pos(int end, long dist) {
this.end = end; this.dist = dist;
}
@Override
public int compareTo(Pos o) {
return Long.compare(this.dist, o.dist);
}
}
static final int INF = 1_000_000_007;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken()); // ๊ต์ฐจ๋ก ๊ฐ์
m = Integer.parseInt(st.nextToken()); // ๊ณจ๋ชฉ ๊ฐ์
a = Integer.parseInt(st.nextToken()); // ์์ ๊ต์ฐจ๋ก ๋ฒํธ
b = Integer.parseInt(st.nextToken()); // ๋์ฐฉ ๊ต์ฐจ๋ก ๋ฒํธ
c = Long.parseLong(st.nextToken()); // ๊ฐ์ง ๋
list = new ArrayList<>();
for (int i = 0; i <= n; i++) {
list.add(new ArrayList<>());
}
int u, v, w;
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
u = Integer.parseInt(st.nextToken());
v = Integer.parseInt(st.nextToken());
w = Integer.parseInt(st.nextToken());
// ์๋ฐฉํฅ ๋๋ก
list.get(u).add(new Pos(v, w));
list.get(v).add(new Pos(u, w));
}
System.out.println(dijkstra(a));
}
private static long dijkstra(int a) {
PriorityQueue<Pos> pq = new PriorityQueue<>();
int start = 1; // ์ต์ ์์น์ฌ
int end = 1_000_000_000; // ์ต๋ ์์น์ฌ
long ans = INF;
while (start <= end) {
// ํ ๊ณจ๋ชฉ์์ ํ์ฉ ๊ฐ๋ฅํ ์์น์ฌ ์ต๋๊ฐ
// mid ์ดํ์ ์๊ธ์ก๋ง ์ฌ์ฉํด ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ์ ์๋์ง ํ๋จ
int mid = start + (end-start) / 2;
long[] dist = new long[n+1];
Arrays.fill(dist, 600_000_000_000_000L);
pq.offer(new Pos(a, 0));
dist[a] = 0;
while (!pq.isEmpty()) {
Pos now = pq.poll();
// ์ด๋ฏธ ์ ์ฅ๋ ์ต์ ์ ๊ฒฝ๋ก๋ณด๋ค ๋ ํฐ ๋น์ฉ์ ์ ๋ฐํ๋ ๊ฒฝ์ฐ
// ํ์ฌ ๊ฒฝ๋ก๋ฅผ ๋ ํ์ ํ ํ์ ์์
if (dist[now.end] < now.dist) continue;
for (Pos next : list.get(now.end)) {
// ๊ณจ๋ชฉ์ ์๊ธ์ก์ด mid๋ณด๋ค ํฌ๋ค๋ฉด ํจ์ค
if (next.dist > mid) continue;
if (dist[next.end] > now.dist + next.dist) {
dist[next.end] = now.dist + next.dist;
pq.offer(new Pos(next.end, dist[next.end]));
}
}
}
if (dist[b] > c) { // ๊ฐ์ง ๋์ผ๋ก ์ด๋ ๋ถ๊ฐํ๋ค๋ฉด ์์น์ฌ ์ฆ๊ฐํ์ฌ ํ์
start = mid+1;
} else { // ์ด๋ ๊ฐ๋ฅํ๋ค๋ฉด ๋ ์์ ์์น์ฌ ํ์
ans = mid;
end = mid-1;
}
}
// ๊ฐ๋ฅํ ๊ฒฝ๋ก๊ฐ ์๋ค๋ฉด -1
ans = ans == INF ? -1 : ans;
return ans;
}
}
๋ค์ต์คํธ๋ผ๋ง์ผ๋ก๋ ํ ์ ์๋ ๋ฌธ์ ์์ง๋ง, ๋ค์ต์คํธ๋ผ์ ์ด๋ถ ํ์์ ์กฐํฉํด์๋ ํ ์ ์๋ ๋ฌธ์ ๋ผ ์๋กญ๊ณ ์ฌ๋ฐ์๋ค.
ํด๊ฒฐ ์๋ฃ ! ๐ฅ
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Boj_1854] K๋ฒ์งธ ์ต๋จ๊ฒฝ๋ก ์ฐพ๊ธฐ (0) | 2025.01.25 |
---|---|
[Boj_20444] ์์ข ์ด์ ๊ฐ์ (1) | 2025.01.20 |
[Boj_14464] ์๊ฐ ๊ธธ์ ๊ฑด๋๊ฐ ์ด์ 4 (1) | 2025.01.16 |
[Boj_14466] ์๊ฐ ๊ธธ์ ๊ฑด๋๊ฐ ์ด์ 6 (0) | 2025.01.11 |
[Boj_12764] ์ธ์ง๋ฐฉ์ ๊ฐ ์คํ (0) | 2025.01.08 |