Submission #12168778


Source Code Expand

{-# LANGUAGE BangPatterns #-}
import           Control.Exception           (assert)
import           Control.Monad
import           Control.Monad.Primitive
import qualified Control.Monad.ST            as ST
import qualified Data.Array.IO               as IO
import qualified Data.Array.ST               as ST
import qualified Data.Array.Unboxed          as A
import           Data.Bits
import qualified Data.ByteString.Char8       as BS
import           Data.Char
import           Data.Foldable
import           Data.List
import           Data.Maybe
import qualified Data.Sequence               as Seq
import qualified Data.Set                    as Set
import qualified Data.Vector.Unboxed         as V
import qualified Data.Vector.Unboxed.Mutable as VM
import           Debug.Trace

readInt = fst . fromJust . BS.readInt
readIntList = map readInt . BS.words
getInt = readInt <$> BS.getLine
getIntList = readIntList <$> BS.getLine
getIntVec n = V.unfoldrN n (BS.readInt . BS.dropWhile isSpace) <$> BS.getLine

readInteger = fst . fromJust . BS.readInteger
readIntegerList = map readInteger . BS.words
getInteger = readInteger <$> BS.getLine
getIntegerList = readIntegerList <$> BS.getLine

inf :: Int
inf = 10^18

newUF :: PrimMonad m => Int -> m (VM.MVector (PrimState m) Int)
newUF n = do
  d <- VM.new n
  VM.set d (-1)
  return d

findUF :: PrimMonad m => VM.MVector (PrimState m) Int -> Int -> m Int
findUF d x = do
  dx <- VM.read d x
  if dx < 0
    then return x
    else do dx' <- findUF d dx
            VM.write d x dx'
            return dx'

uniteUF :: PrimMonad m => VM.MVector (PrimState m) Int -> Int -> Int -> m ()
uniteUF d x y = do
  x' <- findUF d x
  y' <- findUF d y
  when (x' /= y') $ do
    let (x'', y'') = if (x' <= y') then (x', y') else (y', x')
    dx <- VM.read d x''
    dy <- VM.read d y''
    VM.write d x'' (dx + dy)
    VM.write d y'' x''
  return ()

sameUF :: PrimMonad m => VM.MVector (PrimState m) Int -> Int -> Int -> m Bool
sameUF d x y = do
  fx <- findUF d x
  fy <- findUF d y
  return $ fx == fy

sizeUF :: PrimMonad m => VM.MVector (PrimState m) Int -> Int -> m Int
sizeUF d x = do
  fx <- findUF d x
  dfx <- VM.read d fx
  return (-dfx)

quickSortVec l u arr
  | l >= u    = return ()
  | otherwise = do
      VM.unsafeSwap arr l ((u+l)`div`2)
      t <- VM.unsafeRead arr l
      let i = l
          j = u + 1
      nj <- loopVec t u i j arr
      VM.unsafeSwap arr l nj
      quickSortVec l (nj-1) arr
      quickSortVec (nj+1) u arr

loopVec !t !u !i !j arr = do
  ni <- doWhile i (+1)         (< t)
  nj <- doWhile j (subtract 1) (> t)
  if ni > nj
    then return nj
    else do VM.unsafeSwap arr ni nj
            loopVec t u ni nj arr
              where
                {-# INLINE doWhile #-}
                doWhile k op p
                  | nk > u    = return nk
                  | otherwise = do
                      x <- VM.unsafeRead arr nk
                      if p x then
                        doWhile nk op p
                        else
                        return nk
                        where
                          nk = op k

main = do
  [n, m] <- getIntList
  cs <- V.replicateM n getInt

  roads <- VM.new (m + n)
  forM_ [0..(m-1)] $ \i -> do
    [a, b, r] <- getIntList
    VM.write roads i (r, a, b)

  forM_ [0..(n-1)] $ \i -> do
    VM.write roads (m + i) (cs V.! i, i + 1, 0)

  quickSortVec 0 (n+m-1) roads

  va <- VM.new 1
  VM.write va 0 (0::Int)

  uf <- newUF (n+1)
  forM_ [0..(n+m-1)] $ \i -> do
    (r, a, b) <- VM.read roads i
    sameAB <- sameUF uf a b
    unless sameAB $ do
      t <- VM.read va 0
      VM.write va 0 (t + r)
      uniteUF uf a b

  ans <- VM.read va 0
  print ans

Submission Info

Submission Time
Task C - 高橋君と国家
User unnohideyuki
Language Haskell (GHC 7.10.3)
Score 100
Code Size 3820 Byte
Status AC
Exec Time 285 ms
Memory 11132 KB

Judge Result

Set Name Sample Subtask1 Subtask2 Subtask3 Subtask4
Score / Max Score 0 / 0 10 / 10 20 / 20 30 / 30 40 / 40
Status
AC × 3
AC × 33
AC × 63
AC × 93
AC × 123
Set Name Test Cases
Sample subtask0-sample-01.txt, subtask0-sample-02.txt, subtask0-sample-03.txt
Subtask1 subtask0-sample-01.txt, subtask0-sample-02.txt, subtask0-sample-03.txt, subtask1-01.txt, subtask1-02.txt, subtask1-03.txt, subtask1-04.txt, subtask1-05.txt, subtask1-06.txt, subtask1-07.txt, subtask1-08.txt, subtask1-09.txt, subtask1-10.txt, subtask1-11.txt, subtask1-12.txt, subtask1-13.txt, subtask1-14.txt, subtask1-15.txt, subtask1-16.txt, subtask1-17.txt, subtask1-18.txt, subtask1-19.txt, subtask1-20.txt, subtask1-21.txt, subtask1-22.txt, subtask1-23.txt, subtask1-24.txt, subtask1-25.txt, subtask1-26.txt, subtask1-27.txt, subtask1-28.txt, subtask1-29.txt, subtask1-30.txt
Subtask2 subtask0-sample-01.txt, subtask0-sample-02.txt, subtask0-sample-03.txt, subtask1-01.txt, subtask1-02.txt, subtask1-03.txt, subtask1-04.txt, subtask1-05.txt, subtask1-06.txt, subtask1-07.txt, subtask1-08.txt, subtask1-09.txt, subtask1-10.txt, subtask1-11.txt, subtask1-12.txt, subtask1-13.txt, subtask1-14.txt, subtask1-15.txt, subtask1-16.txt, subtask1-17.txt, subtask1-18.txt, subtask1-19.txt, subtask1-20.txt, subtask1-21.txt, subtask1-22.txt, subtask1-23.txt, subtask1-24.txt, subtask1-25.txt, subtask1-26.txt, subtask1-27.txt, subtask1-28.txt, subtask1-29.txt, subtask1-30.txt, subtask2-01.txt, subtask2-02.txt, subtask2-03.txt, subtask2-04.txt, subtask2-05.txt, subtask2-06.txt, subtask2-07.txt, subtask2-08.txt, subtask2-09.txt, subtask2-10.txt, subtask2-11.txt, subtask2-12.txt, subtask2-13.txt, subtask2-14.txt, subtask2-15.txt, subtask2-16.txt, subtask2-17.txt, subtask2-18.txt, subtask2-19.txt, subtask2-20.txt, subtask2-21.txt, subtask2-22.txt, subtask2-23.txt, subtask2-24.txt, subtask2-25.txt, subtask2-26.txt, subtask2-27.txt, subtask2-28.txt, subtask2-29.txt, subtask2-30.txt
Subtask3 subtask0-sample-01.txt, subtask0-sample-02.txt, subtask0-sample-03.txt, subtask1-01.txt, subtask1-02.txt, subtask1-03.txt, subtask1-04.txt, subtask1-05.txt, subtask1-06.txt, subtask1-07.txt, subtask1-08.txt, subtask1-09.txt, subtask1-10.txt, subtask1-11.txt, subtask1-12.txt, subtask1-13.txt, subtask1-14.txt, subtask1-15.txt, subtask1-16.txt, subtask1-17.txt, subtask1-18.txt, subtask1-19.txt, subtask1-20.txt, subtask1-21.txt, subtask1-22.txt, subtask1-23.txt, subtask1-24.txt, subtask1-25.txt, subtask1-26.txt, subtask1-27.txt, subtask1-28.txt, subtask1-29.txt, subtask1-30.txt, subtask2-01.txt, subtask2-02.txt, subtask2-03.txt, subtask2-04.txt, subtask2-05.txt, subtask2-06.txt, subtask2-07.txt, subtask2-08.txt, subtask2-09.txt, subtask2-10.txt, subtask2-11.txt, subtask2-12.txt, subtask2-13.txt, subtask2-14.txt, subtask2-15.txt, subtask2-16.txt, subtask2-17.txt, subtask2-18.txt, subtask2-19.txt, subtask2-20.txt, subtask2-21.txt, subtask2-22.txt, subtask2-23.txt, subtask2-24.txt, subtask2-25.txt, subtask2-26.txt, subtask2-27.txt, subtask2-28.txt, subtask2-29.txt, subtask2-30.txt, subtask3-01.txt, subtask3-02.txt, subtask3-03.txt, subtask3-04.txt, subtask3-05.txt, subtask3-06.txt, subtask3-07.txt, subtask3-08.txt, subtask3-09.txt, subtask3-10.txt, subtask3-11.txt, subtask3-12.txt, subtask3-13.txt, subtask3-14.txt, subtask3-15.txt, subtask3-16.txt, subtask3-17.txt, subtask3-18.txt, subtask3-19.txt, subtask3-20.txt, subtask3-21.txt, subtask3-22.txt, subtask3-23.txt, subtask3-24.txt, subtask3-25.txt, subtask3-26.txt, subtask3-27.txt, subtask3-28.txt, subtask3-29.txt, subtask3-30.txt
Subtask4 subtask0-sample-01.txt, subtask0-sample-02.txt, subtask0-sample-03.txt, subtask1-01.txt, subtask1-02.txt, subtask1-03.txt, subtask1-04.txt, subtask1-05.txt, subtask1-06.txt, subtask1-07.txt, subtask1-08.txt, subtask1-09.txt, subtask1-10.txt, subtask1-11.txt, subtask1-12.txt, subtask1-13.txt, subtask1-14.txt, subtask1-15.txt, subtask1-16.txt, subtask1-17.txt, subtask1-18.txt, subtask1-19.txt, subtask1-20.txt, subtask1-21.txt, subtask1-22.txt, subtask1-23.txt, subtask1-24.txt, subtask1-25.txt, subtask1-26.txt, subtask1-27.txt, subtask1-28.txt, subtask1-29.txt, subtask1-30.txt, subtask2-01.txt, subtask2-02.txt, subtask2-03.txt, subtask2-04.txt, subtask2-05.txt, subtask2-06.txt, subtask2-07.txt, subtask2-08.txt, subtask2-09.txt, subtask2-10.txt, subtask2-11.txt, subtask2-12.txt, subtask2-13.txt, subtask2-14.txt, subtask2-15.txt, subtask2-16.txt, subtask2-17.txt, subtask2-18.txt, subtask2-19.txt, subtask2-20.txt, subtask2-21.txt, subtask2-22.txt, subtask2-23.txt, subtask2-24.txt, subtask2-25.txt, subtask2-26.txt, subtask2-27.txt, subtask2-28.txt, subtask2-29.txt, subtask2-30.txt, subtask3-01.txt, subtask3-02.txt, subtask3-03.txt, subtask3-04.txt, subtask3-05.txt, subtask3-06.txt, subtask3-07.txt, subtask3-08.txt, subtask3-09.txt, subtask3-10.txt, subtask3-11.txt, subtask3-12.txt, subtask3-13.txt, subtask3-14.txt, subtask3-15.txt, subtask3-16.txt, subtask3-17.txt, subtask3-18.txt, subtask3-19.txt, subtask3-20.txt, subtask3-21.txt, subtask3-22.txt, subtask3-23.txt, subtask3-24.txt, subtask3-25.txt, subtask3-26.txt, subtask3-27.txt, subtask3-28.txt, subtask3-29.txt, subtask3-30.txt, subtask4-01.txt, subtask4-02.txt, subtask4-03.txt, subtask4-04.txt, subtask4-05.txt, subtask4-06.txt, subtask4-07.txt, subtask4-08.txt, subtask4-09.txt, subtask4-10.txt, subtask4-11.txt, subtask4-12.txt, subtask4-13.txt, subtask4-14.txt, subtask4-15.txt, subtask4-16.txt, subtask4-17.txt, subtask4-18.txt, subtask4-19.txt, subtask4-20.txt, subtask4-21.txt, subtask4-22.txt, subtask4-23.txt, subtask4-24.txt, subtask4-25.txt, subtask4-26.txt, subtask4-27.txt, subtask4-28.txt, subtask4-29.txt, subtask4-30.txt
Case Name Status Exec Time Memory
subtask0-sample-01.txt AC 2 ms 508 KB
subtask0-sample-02.txt AC 2 ms 508 KB
subtask0-sample-03.txt AC 2 ms 508 KB
subtask1-01.txt AC 2 ms 380 KB
subtask1-02.txt AC 2 ms 380 KB
subtask1-03.txt AC 2 ms 508 KB
subtask1-04.txt AC 2 ms 508 KB
subtask1-05.txt AC 2 ms 508 KB
subtask1-06.txt AC 2 ms 508 KB
subtask1-07.txt AC 2 ms 380 KB
subtask1-08.txt AC 2 ms 508 KB
subtask1-09.txt AC 2 ms 508 KB
subtask1-10.txt AC 2 ms 508 KB
subtask1-11.txt AC 2 ms 508 KB
subtask1-12.txt AC 2 ms 508 KB
subtask1-13.txt AC 2 ms 380 KB
subtask1-14.txt AC 2 ms 508 KB
subtask1-15.txt AC 2 ms 508 KB
subtask1-16.txt AC 2 ms 508 KB
subtask1-17.txt AC 2 ms 508 KB
subtask1-18.txt AC 2 ms 508 KB
subtask1-19.txt AC 2 ms 508 KB
subtask1-20.txt AC 2 ms 508 KB
subtask1-21.txt AC 2 ms 508 KB
subtask1-22.txt AC 2 ms 508 KB
subtask1-23.txt AC 2 ms 508 KB
subtask1-24.txt AC 2 ms 508 KB
subtask1-25.txt AC 2 ms 508 KB
subtask1-26.txt AC 2 ms 508 KB
subtask1-27.txt AC 2 ms 508 KB
subtask1-28.txt AC 2 ms 508 KB
subtask1-29.txt AC 2 ms 508 KB
subtask1-30.txt AC 2 ms 508 KB
subtask2-01.txt AC 2 ms 508 KB
subtask2-02.txt AC 2 ms 508 KB
subtask2-03.txt AC 2 ms 508 KB
subtask2-04.txt AC 2 ms 508 KB
subtask2-05.txt AC 2 ms 508 KB
subtask2-06.txt AC 2 ms 508 KB
subtask2-07.txt AC 2 ms 508 KB
subtask2-08.txt AC 2 ms 508 KB
subtask2-09.txt AC 2 ms 508 KB
subtask2-10.txt AC 2 ms 508 KB
subtask2-11.txt AC 2 ms 508 KB
subtask2-12.txt AC 2 ms 508 KB
subtask2-13.txt AC 2 ms 508 KB
subtask2-14.txt AC 2 ms 636 KB
subtask2-15.txt AC 2 ms 508 KB
subtask2-16.txt AC 2 ms 508 KB
subtask2-17.txt AC 2 ms 508 KB
subtask2-18.txt AC 2 ms 508 KB
subtask2-19.txt AC 2 ms 508 KB
subtask2-20.txt AC 2 ms 508 KB
subtask2-21.txt AC 2 ms 508 KB
subtask2-22.txt AC 2 ms 508 KB
subtask2-23.txt AC 2 ms 508 KB
subtask2-24.txt AC 2 ms 508 KB
subtask2-25.txt AC 2 ms 508 KB
subtask2-26.txt AC 2 ms 508 KB
subtask2-27.txt AC 2 ms 636 KB
subtask2-28.txt AC 2 ms 636 KB
subtask2-29.txt AC 2 ms 636 KB
subtask2-30.txt AC 2 ms 636 KB
subtask3-01.txt AC 3 ms 1020 KB
subtask3-02.txt AC 3 ms 1020 KB
subtask3-03.txt AC 3 ms 1020 KB
subtask3-04.txt AC 4 ms 1020 KB
subtask3-05.txt AC 5 ms 1020 KB
subtask3-06.txt AC 4 ms 1020 KB
subtask3-07.txt AC 4 ms 1020 KB
subtask3-08.txt AC 5 ms 1148 KB
subtask3-09.txt AC 6 ms 1148 KB
subtask3-10.txt AC 5 ms 1148 KB
subtask3-11.txt AC 6 ms 1148 KB
subtask3-12.txt AC 5 ms 1148 KB
subtask3-13.txt AC 6 ms 1148 KB
subtask3-14.txt AC 8 ms 1148 KB
subtask3-15.txt AC 8 ms 1148 KB
subtask3-16.txt AC 9 ms 1276 KB
subtask3-17.txt AC 9 ms 1276 KB
subtask3-18.txt AC 9 ms 1276 KB
subtask3-19.txt AC 9 ms 1276 KB
subtask3-20.txt AC 9 ms 1276 KB
subtask3-21.txt AC 9 ms 1276 KB
subtask3-22.txt AC 9 ms 1276 KB
subtask3-23.txt AC 9 ms 1276 KB
subtask3-24.txt AC 9 ms 1276 KB
subtask3-25.txt AC 9 ms 1276 KB
subtask3-26.txt AC 9 ms 1276 KB
subtask3-27.txt AC 9 ms 1276 KB
subtask3-28.txt AC 9 ms 1276 KB
subtask3-29.txt AC 9 ms 1276 KB
subtask3-30.txt AC 9 ms 1276 KB
subtask4-01.txt AC 13 ms 1404 KB
subtask4-02.txt AC 19 ms 1660 KB
subtask4-03.txt AC 26 ms 1916 KB
subtask4-04.txt AC 114 ms 4732 KB
subtask4-05.txt AC 154 ms 8444 KB
subtask4-06.txt AC 224 ms 8828 KB
subtask4-07.txt AC 226 ms 8444 KB
subtask4-08.txt AC 154 ms 8700 KB
subtask4-09.txt AC 198 ms 7804 KB
subtask4-10.txt AC 277 ms 10364 KB
subtask4-11.txt AC 280 ms 11132 KB
subtask4-12.txt AC 280 ms 10492 KB
subtask4-13.txt AC 283 ms 11132 KB
subtask4-14.txt AC 282 ms 10364 KB
subtask4-15.txt AC 278 ms 11132 KB
subtask4-16.txt AC 282 ms 10492 KB
subtask4-17.txt AC 280 ms 10492 KB
subtask4-18.txt AC 281 ms 10364 KB
subtask4-19.txt AC 274 ms 10492 KB
subtask4-20.txt AC 283 ms 11132 KB
subtask4-21.txt AC 278 ms 11132 KB
subtask4-22.txt AC 277 ms 10364 KB
subtask4-23.txt AC 277 ms 10492 KB
subtask4-24.txt AC 277 ms 11132 KB
subtask4-25.txt AC 283 ms 11132 KB
subtask4-26.txt AC 280 ms 10492 KB
subtask4-27.txt AC 278 ms 11132 KB
subtask4-28.txt AC 281 ms 10364 KB
subtask4-29.txt AC 285 ms 10364 KB
subtask4-30.txt AC 279 ms 11132 KB