結果

問題 No.468 役に立つ競技プログラミング実践編
ユーザー 👑 obakyan
提出日時 2021-06-10 21:02:45
言語 Lua
(LuaJit 2.1.1734355927)
結果
AC  
実行時間 410 ms / 2,000 ms
コード長 1,362 bytes
コンパイル時間 62 ms
コンパイル使用メモリ 6,688 KB
実行使用メモリ 45,312 KB
最終ジャッジ日時 2024-11-30 08:04:37
合計ジャッジ時間 6,856 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 31
other AC * 6
権限があれば一括ダウンロードができます

ソースコード

diff #

local mfl, mce = math.floor, math.ceil
local mmi, mma = math.min, math.max
local n, m = io.read("*n", "*n")
local edge = {}
local invedge = {}
local lrem, rrem = {}, {}
local llen, rlen = {}, {}
for i = 1, n do
  edge[i], invedge[i] = {}, {}
  lrem[i], rrem[i] = 0, 0
  llen[i], rlen[i] = 0, 0
end
for i = 1, m do
  local a, b, c = io.read("*n", "*n", "*n")
  a, b = a + 1, b + 1
  edge[a][b], invedge[b][a] = c, c
  lrem[b] = lrem[b] + 1
  rrem[a] = rrem[a] + 1
end
local tasks = {}
for i = 1, n do
  if lrem[i] == 0 then table.insert(tasks, i) end
end
for i = 1, n do
  local src = tasks[i]
  for dst, cost in pairs(edge[src]) do
    llen[dst] = mma(llen[dst] ,llen[src] + cost)
    lrem[dst] = lrem[dst] - 1
    if lrem[dst] == 0 then
      table.insert(tasks, dst)
    end
  end
end
local totlen = llen[n]
tasks = {}
for i = 1, n do
  if rrem[i] == 0 then table.insert(tasks, i) end
end
local denom = n
local numer = n
for i = 1, n do
  local src = tasks[i]
  if rlen[src] + llen[src] == totlen then
    numer = numer - 1
  end
  for dst, cost in pairs(invedge[src]) do
    rlen[dst] = mma(rlen[dst], rlen[src] + cost)
    rrem[dst] = rrem[dst] - 1
    if rrem[dst] == 0 then
      table.insert(tasks, dst)
    end
  end
end

local function getgcd(x, y)
  while 0 < x do
    x, y = y % x, x
  end
  return y
end
print(totlen .. " " .. numer .. "/" .. denom)
0