結果
問題 | No.1382 Travel in Mitaru city |
ユーザー |
👑 |
提出日時 | 2021-03-07 23:14:21 |
言語 | Lua (LuaJit 2.1.1734355927) |
結果 |
AC
|
実行時間 | 239 ms / 2,000 ms |
コード長 | 2,049 bytes |
コンパイル時間 | 337 ms |
コンパイル使用メモリ | 5,632 KB |
実行使用メモリ | 17,664 KB |
最終ジャッジ日時 | 2024-10-09 09:19:43 |
合計ジャッジ時間 | 11,240 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 68 |
ソースコード
local bls, brs = bit.lshift, bit.rshiftlocal Heapq = {}Heapq.create = function(self, lt)self.lt = ltself.cnt = 0self.t = {}endHeapq.push = function(self, v)local hqlt = self.ltlocal hqt = self.tlocal c = self.cnt + 1self.cnt = chqt[c] = vwhile 1 < c dolocal p = brs(c, 1)if hqlt(hqt[c], hqt[p]) thenhqt[c], hqt[p] = hqt[p], hqt[c]c = pelsebreakendendendHeapq.empty = function(self)return self.cnt == 0endHeapq.pop = function(self)local hqlt = self.ltlocal hqt = self.tlocal ret = hqt[1]local c = self.cnthqt[1] = hqt[c]c = c - 1self.cnt = clocal p = 1while true dolocal d1, d2 = p * 2, p * 2 + 1if c < d1 then breakelseif c < d2 thenif hqlt(hqt[d1], hqt[p]) thenhqt[d1], hqt[p] = hqt[p], hqt[d1]endbreakelseif hqlt(hqt[d1], hqt[d2]) thenif hqlt(hqt[d1], hqt[p]) thenhqt[d1], hqt[p] = hqt[p], hqt[d1]p = d1else breakendelseif hqlt(hqt[d2], hqt[p]) thenhqt[d2], hqt[p] = hqt[p], hqt[d2]p = d2else breakendendendendreturn retendHeapq.new = function(lt)local obj = {}setmetatable(obj, {__index = Heapq})obj:create(lt)return objendlocal n, m = io.read("*n", "*n")local spos, tpos = io.read("*n", "*n")local p = {}local edge = {}local asked = {}for i = 1, n dop[i] = io.read("*n")edge[i] = {}asked[i] = falseendfor i = 1, m dolocal a, b = io.read("*n", "*n")table.insert(edge[a], b)table.insert(edge[b], a)endlocal function hqlt(a, b)return p[a] > p[b]endlocal hq = Heapq.new(hqlt)asked[spos] = truehq:push(spos)local ret = 0local curval = p[spos]while not hq:empty() dolocal v = hq:pop()if p[v] < curval thenret = ret + 1curval = p[v]endfor i = 1, #edge[v] dolocal dst = edge[v][i]if not asked[dst] thenasked[dst] = truehq:push(dst)endendendprint(ret)