結果
問題 | No.160 最短経路のうち辞書順最小 |
ユーザー | aimy |
提出日時 | 2017-07-07 10:41:15 |
言語 | Haskell (9.8.2) |
結果 |
CE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,256 bytes |
コンパイル時間 | 206 ms |
コンパイル使用メモリ | 150,528 KB |
最終ジャッジ日時 | 2024-11-14 20:05:52 |
合計ジャッジ時間 | 648 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
コンパイルメッセージ
Loaded package environment from /home/judge/.ghc/x86_64-linux-9.8.2/environments/default [1 of 2] Compiling Main ( Main.hs, Main.o ) Main.hs:1:1: error: [GHC-87110] Could not load module ‘Data.IntMap.Strict’. It is a member of the hidden package ‘containers-0.6.8’. Use -v to see a list of the files searched for. | 1 | import Data.IntMap.Strict ((!)) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Main.hs:2:1: error: [GHC-87110] Could not load module ‘Data.IntMap.Strict’. It is a member of the hidden package ‘containers-0.6.8’. Use -v to see a list of the files searched for. | 2 | import qualified Data.IntMap.Strict as M | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Main.hs:3:1: error: [GHC-87110] Could not load module ‘Data.Set’. It is a member of the hidden package ‘containers-0.6.8’. Use -v to see a list of the files searched for. | 3 | import qualified Data.Set as S | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ソースコード
import Data.IntMap.Strict ((!)) import qualified Data.IntMap.Strict as M import qualified Data.Set as S import qualified Data.ByteString.Char8 as B import Control.Monad import Data.Maybe import Data.List type Cost = Int type Vertex = Int type Heap = S.Set (Cost, Vertex) nullq = S.null empty = S.empty push c v = S.insert (c,v) pop = S.deleteFindMin main = do [n,_,s,g] <- map read . words <$> getLine es <- map (map (fst . fromJust . B.readInt) . B.words) . B.lines <$> B.getContents putStrLn $ unwords $ map show (route n s g es) route n s g es = unfoldr (backtrack imr) s ++ [g] where imr = dijkstra t im0 q0 t = foldl' (\acc [a,b,c] -> M.insertWith (++) b [(a,c)] (M.insertWith (++) a [(b,c)] acc)) M.empty es im0 = M.singleton g (0,[]) q0 = push 0 g empty backtrack im v = case im!v of (0,[]) -> Nothing (_,(vp:_)) -> Just (v,vp) dijkstra t im q | nullq q = im | otherwise = dijkstra t im' q'' where ((c0,v),q') = pop q im' = foldl' (\acc (b,c) -> M.insertWith mindic b (c0+c,[v]) acc) im vns q'' = foldl' (\acc (b,c) -> push (c0+c) b acc) q' vns vns = filter (\(b,c) -> M.notMember b im || c0+c <= fst (im!b)) (M.findWithDefault [] v t) mindic (c1,v1@[v]) (c2,v2) | c1 < c2 = (c1,v1) | c1 == c2 = (c1, insert v v2)