Submission #65132871


Source Code Expand

import Control.Monad
import qualified Data.ByteString.Char8 as BS
import Data.Char
import Data.List

import Control.Monad.ST
import Data.Array.ST
import Data.Array.Unboxed

main :: IO ()
main = do
  [n,m] <- bsGetLnInts
  abcs <- replicateM m bsGetLnInts
  let ans = abc243e n m abcs
  print ans

bsGetLnInts :: IO [Int]
bsGetLnInts = unfoldr (BS.readInt . BS.dropWhile isSpace) <$> BS.getLine

abc243e :: Int -> Int -> [[Int]] -> Int
abc243e n m abcs = length [() | a:b:c:_ <- abcs, d ! (a,b) < pred (c * succ m)]
  where
    d = runSTUArray $ warshallFloyd (1,n) $ concat
        [[(a,b,c1),(b,a,c1)] | a:b:c:_ <- abcs, let c1 = pred $ c * succ m]

warshallFloyd :: (Int,Int)                       -- 頂点番号範囲
              -> [(Int,Int,Int)]                 -- グラフ
              -> ST s (STUArray s (Int,Int) Int) -- 距離
warshallFloyd bnds@(lb,ub) g =
  do
    d <- newArray ((lb,lb),(ub,ub)) maxBound
    forM_ g (\(a,b,c) -> writeArray d (a,b) c)
    forM_ (range bnds) (\k ->
      forM_ (range bnds) (\i -> do
        dik <- readArray d (i,k)
        when (dik < maxBound) $ do
          forM_ (range bnds) (\j -> do
            dkj <- readArray d (k,j)
            when (dkj < maxBound) $ do
              dij <- readArray d (i,j)
              let dikj = dik + dkj
              when (dikj < dij) (writeArray d (i,j) dikj)
            )
        )
      )
    return d

Submission Info

Submission Time
Task E - Edge Deletion
User joetheshootingst
Language Haskell (GHC 9.4.5)
Score 500
Code Size 1442 Byte
Status AC
Exec Time 171 ms
Memory 26088 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 3
AC × 24
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_small_00.txt, 01_small_01.txt, 01_small_02.txt, 01_small_03.txt, 01_small_04.txt, 01_small_05.txt, 02_perfect_00.txt, 02_perfect_01.txt, 02_perfect_02.txt, 02_perfect_03.txt, 02_perfect_04.txt, 02_perfect_05.txt, 03_anti-dijkstra_00.txt, 03_anti-dijkstra_01.txt, 03_anti-dijkstra_02.txt, 03_anti-dijkstra_03.txt, 04_random_00.txt, 04_random_01.txt, 05_tree_00.txt, 05_tree_01.txt, 06_path_00.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 6692 KiB
00_sample_01.txt AC 1 ms 6796 KiB
00_sample_02.txt AC 1 ms 6792 KiB
01_small_00.txt AC 3 ms 7956 KiB
01_small_01.txt AC 3 ms 7976 KiB
01_small_02.txt AC 3 ms 7928 KiB
01_small_03.txt AC 3 ms 7980 KiB
01_small_04.txt AC 3 ms 7992 KiB
01_small_05.txt AC 2 ms 7856 KiB
02_perfect_00.txt AC 171 ms 26060 KiB
02_perfect_01.txt AC 171 ms 26088 KiB
02_perfect_02.txt AC 171 ms 26060 KiB
02_perfect_03.txt AC 161 ms 25660 KiB
02_perfect_04.txt AC 161 ms 25584 KiB
02_perfect_05.txt AC 161 ms 25544 KiB
03_anti-dijkstra_00.txt AC 151 ms 25896 KiB
03_anti-dijkstra_01.txt AC 151 ms 25860 KiB
03_anti-dijkstra_02.txt AC 151 ms 25872 KiB
03_anti-dijkstra_03.txt AC 151 ms 25588 KiB
04_random_00.txt AC 161 ms 17848 KiB
04_random_01.txt AC 151 ms 17720 KiB
05_tree_00.txt AC 20 ms 7724 KiB
05_tree_01.txt AC 20 ms 7800 KiB
06_path_00.txt AC 10 ms 7864 KiB