Submission #1777683


Source Code Expand

import Data.List
import Data.Array
import Data.Array.IO
import Control.Monad

data Node = Node {
    edgesTO   :: [Int],
    edgesCost :: [Int],
    nodeDone  :: Bool,
    nodeCost  :: Int
    } deriving (Show, Eq)
type FNodes = (Array Int Node)
type Nodes  = (IOArray Int Node)

getDoneNodeIndex :: [Node] -> Int
getDoneNodeIndex nodes = iter (-1) 0
    where
        iter i n
            | n == length nodes                          = i + 1
            | nodeDone node || nodeCost node < 0         = iter i (n + 1)
            | i == -1 || nodeCost node < nodeCost done   = iter n (n + 1)
            | otherwise                                  = iter i (n + 1)
            where
                node = nodes !! n
                done = nodes !! i

calc :: Nodes -> IO ()
calc nodes = do
    list <- getElems nodes
    let i = getDoneNodeIndex list
    when (i > 0) $ do
        done <- readArray nodes i
        writeArray nodes i (done { nodeDone = True })
        forM_ [0 .. length (edgesTO done) - 1] $ \x -> do
            let to      = edgesTO done !! x
            let cost    = nodeCost done + edgesCost done !! x
            node <- readArray nodes to
            when (nodeCost node < 0 || cost < nodeCost node) $ writeArray nodes to (node { nodeCost = cost } )
        calc nodes


calcCost :: Int -> Nodes -> IO Int
calcCost start nodes = do
    s <- readArray nodes start
    writeArray nodes start (s { nodeCost = 0 })
    calc nodes
    list <- getElems nodes
    return $ nodeCost $ maximumBy (\a b -> compare (nodeCost a) (nodeCost b)) list

setNode :: Int -> Int -> Int -> Nodes -> IO ()
setNode n to cost nodes = do
    n1 <- readArray nodes n
    writeArray nodes n (n1 { edgesTO =  edgesTO n1 ++ [to], edgesCost = edgesCost n1 ++ [cost] })
    n2 <- readArray nodes to
    writeArray nodes to (n2 { edgesTO = edgesTO n2 ++ [n], edgesCost = edgesCost n2 ++ [cost] })
    return ()

main :: IO ()
main = do
    [n,m] <- map read . words <$> getLine :: IO [Int]
    input <- newArray (1,n) (Node [] [] False (-1)) :: IO Nodes
    replicateM_ m $ do
        [a,b,t] <- map read . words <$> getLine
        setNode a b t input
    baseNodes <- freeze input :: IO FNodes

    list <- forM [1..n] $ \i -> do
        nodes <- thaw baseNodes
        calcCost i nodes
    print $ minimum list

Submission Info

Submission Time
Task D - バスと避けられない運命
User atctk
Language Haskell (GHC 7.10.3)
Score 0
Code Size 2378 Byte
Status TLE
Exec Time 5257 ms
Memory 35196 KB

Judge Result

Set Name All
Score / Max Score 0 / 100
Status
AC × 25
TLE × 14
Set Name Test Cases
All sample_01.txt, sample_02.txt, sample_03.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt
Case Name Status Exec Time Memory
sample_01.txt AC 1 ms 508 KB
sample_02.txt AC 2 ms 508 KB
sample_03.txt AC 1 ms 508 KB
test_01.txt AC 1 ms 508 KB
test_02.txt TLE 5255 ms 7676 KB
test_03.txt TLE 5257 ms 35196 KB
test_04.txt AC 3019 ms 7548 KB
test_05.txt TLE 5256 ms 15740 KB
test_06.txt AC 340 ms 6524 KB
test_07.txt TLE 5257 ms 28028 KB
test_08.txt AC 13 ms 1660 KB
test_09.txt AC 4572 ms 12668 KB
test_10.txt AC 264 ms 3452 KB
test_11.txt AC 326 ms 4476 KB
test_12.txt TLE 5256 ms 10620 KB
test_13.txt AC 357 ms 4476 KB
test_14.txt AC 618 ms 5500 KB
test_15.txt TLE 5257 ms 27004 KB
test_16.txt AC 745 ms 5500 KB
test_17.txt TLE 5256 ms 13692 KB
test_18.txt AC 4753 ms 12156 KB
test_19.txt AC 838 ms 6524 KB
test_20.txt AC 621 ms 5500 KB
test_21.txt AC 2 ms 1020 KB
test_22.txt AC 1401 ms 5884 KB
test_23.txt AC 6 ms 1276 KB
test_24.txt TLE 5256 ms 6908 KB
test_25.txt TLE 5256 ms 7548 KB
test_26.txt AC 1380 ms 4476 KB
test_27.txt AC 2039 ms 6908 KB
test_28.txt TLE 5256 ms 7548 KB
test_29.txt TLE 5256 ms 6908 KB
test_30.txt AC 165 ms 1916 KB
test_31.txt AC 8 ms 1020 KB
test_32.txt TLE 5256 ms 6908 KB
test_33.txt TLE 5256 ms 7548 KB
test_34.txt AC 42 ms 1404 KB
test_35.txt AC 993 ms 4476 KB
test_36.txt TLE 5256 ms 6908 KB