728x90
https://www.acmicpc.net/problem/18352
18352๋ฒ: ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ
์ฒซ์งธ ์ค์ ๋์์ ๊ฐ์ N, ๋๋ก์ ๊ฐ์ M, ๊ฑฐ๋ฆฌ ์ ๋ณด K, ์ถ๋ฐ ๋์์ ๋ฒํธ X๊ฐ ์ฃผ์ด์ง๋ค. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) ๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ๊ฑธ์ณ์ ๋ ๊ฐ
www.acmicpc.net
๊ทธ๋ํ, ๋ค์ต์คํธ๋ผ ์ฐ์ต์ ํ๋ ค๊ณ ์๋ํ๋ ๋ฌธ์ ์ด๋ค.
๊ธฐ์กด์ ๊ทธ๋ํ๋ฅผ ์ํํ ๋ ์๋์ฒ๋ผ ๋ง์ด ์ฌ์ฉํ์๋๋ฐ, ์๊ฐ์ด๊ณผ๊ฐ ๋์ idx๋ก ํ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์์ ํ๋ค.
while let q = queue.isEmpty() ? nil : queue.removeFirst()
X๋ถํฐ ํ(์ผ๋ฐ ๋ฐฐ์ด)์ ๋ฃ์ (๊ฑฐ๋ฆฌ๋ฐฐ์ดdist๋ max๊ฐ์ผ๋ก ์ด๊ธฐํ, ์์์ ์ 0 ๋ฃ์ด์ฃผ๊ธฐ)
"ํ์ฌ idx ๊ฑฐ๋ฆฌ +1 < ๋ค์ idx ๊ฑฐ๋ฆฌ" ์ด๋ฉด ๊ฑฐ๋ฆฌ ์ ๋ฐ์ดํธ, ํ์ ์ถ๊ฐ
idx๊ฐ queue๋ฐฐ์ดํฌ๊ธฐ๋ณด๋ค ์ปค์ง๋ฉด ๋ฐ๋ณต ์ข ๋ฃ(๋์ด์ ๋ฐฉ๋ฌธํ ์ ์ ์ด ์์์ ๋ปํจ)
let NMKX = readLine()!.split(separator: " ").map { Int($0)! }
let (N, M, K, X) = (NMKX[0],NMKX[1],NMKX[2],NMKX[3])
var list: [[Int]] = Array(repeating: [], count: N+1)
for _ in 0..<M {
let tmp = readLine()!.split(separator: " ").map { Int($0)! }
let (st, ed) = (tmp[0], tmp[1])
list[st].append(ed)
}
var dist = Array(repeating: Int.max, count: N+1)
dist[X] = 0
var queue: [Int] = [X]
var ansList:[Int] = []
var idx = 0
while idx < queue.count {
let now = queue[idx]
idx += 1
for n in list[now] {
if dist[n] > dist[now]+1 {
dist[n] = dist[now]+1
queue.append(n)
if dist[n] == K {
ansList.append(n)
}
}
}
}
if ansList.isEmpty {
print("-1")
} else {
ansList.sorted().forEach { print($0) }
}
728x90
'๐ Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ๋ฐฑ์ค 14938๋ฒ ์๊ฐ ๊ทธ๋ผ์ด๋ (0) | 2024.10.30 |
---|---|
[Swift] ๋ฐฑ์ค 14284๋ฒ ๊ฐ์ ์ด์ด๊ฐ๊ธฐ 2 (0) | 2024.10.21 |