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 |
|
|
|
|
|
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 |