Submission #286722
Source Code Expand
{-# OPTIONS_GHC -O2 #-} {-# LANGUAGE NPlusKPatterns #-} {-# LANGUAGE ScopedTypeVariables #-} import Control.Applicative hiding (empty) import Control.Arrow import Control.Monad import Data.Array import Data.Bits import Control.Monad.State import Control.Monad.Trans.List import qualified Data.ByteString.Char8 as B import qualified Data.List as L import Data.Ord import qualified Data.Set as S import Data.STRef import qualified Data.Vector as V import qualified Data.Vector.Mutable as MV import qualified Data.Vector.Unboxed as UV import qualified Data.Vector.Unboxed.Mutable as UMV import Debug.Trace main = do n <- readInt <$> B.getLine k <- readInt <$> B.getLine putStrLn $ if n >= k + k then "YES" else "NO" initGraph :: Int -> [[Int]] -> V.Vector [(Vertex, Int)] initGraph n rs = V.create $ do es <- MV.new n forM_ [0..n-1] $ \i -> MV.write es i [] forM_ rs $ \[a, b, c] -> do MV.read es a >>= MV.write es a . ((b, c):) MV.read es b >>= MV.write es b . ((a, c):) return es bfs :: Monad m => (a -> m [a]) -> [a] -> m [a] bfs f xs = liftM concat (mapM f xs) >>= liftM (xs++) . bfs f type Vertex = Int dijkstra :: Int -> Int -> V.Vector [(Vertex, Int)] -> UV.Vector Int dijkstra n s es = UV.create $ do let inf = 2 ^ 28 :: Int ds <- UMV.new n forM_ [0..n-1] $ \i -> UMV.write ds i inf UMV.write ds s 0 queue <- newSTRef $ insert (0, s) empty let loop = minView <$> readSTRef queue >>= \x -> case x of Nothing -> return () Just ((d, v), r) -> do writeSTRef queue r d' <- UMV.read ds v when (d <= d') $ forM_ (V.unsafeIndex es v) $ \(u, w) -> do d'' <- UMV.read ds u when (d + w < d'') $ do UMV.write ds u (d + w) modifySTRef queue (insert (d + w, u)) loop loop return ds readInt bs = let Just (v, _) = B.readInt bs in v readInts = map readInt . B.words data PairingHeap a = Empty | PairingHeap !a ![PairingHeap a] deriving (Eq, Show) empty :: PairingHeap a empty = Empty insert :: Ord a => a -> PairingHeap a -> PairingHeap a insert a = merge (PairingHeap a []) minView :: Ord a => PairingHeap a -> Maybe (a, PairingHeap a) minView Empty = Nothing minView (PairingHeap a s) = Just (a, mergePairs s) merge :: Ord a => PairingHeap a -> PairingHeap a -> PairingHeap a merge h1@(PairingHeap a1 c1) h2@(PairingHeap a2 c2) | a1 < a2 = PairingHeap a1 (h2:c1) | otherwise = PairingHeap a2 (h1:c2) merge Empty h2 = h2 merge h1 Empty = h1 mergePairs :: Ord a => [PairingHeap a] -> PairingHeap a mergePairs [] = Empty mergePairs [h] = h mergePairs (h1:h2:rest) = merge (merge h1 h2) $ mergePairs rest
Submission Info
Submission Time | |
---|---|
Task | A - 閉路グラフ |
User | minpou |
Language | Haskell (GHC 7.4.1) |
Score | 100 |
Code Size | 2965 Byte |
Status | AC |
Exec Time | 43 ms |
Memory | 1432 KB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 100 / 100 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | subtask0_sample_01.txt, subtask0_sample_02.txt, subtask0_sample_03.txt, subtask0_sample_04.txt |
All | subtask0_sample_01.txt, subtask0_sample_02.txt, subtask0_sample_03.txt, subtask0_sample_04.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 |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
subtask0_sample_01.txt | AC | 26 ms | 1316 KB |
subtask0_sample_02.txt | AC | 25 ms | 1304 KB |
subtask0_sample_03.txt | AC | 25 ms | 1304 KB |
subtask0_sample_04.txt | AC | 43 ms | 1304 KB |
subtask1_01.txt | AC | 25 ms | 1308 KB |
subtask1_02.txt | AC | 26 ms | 1292 KB |
subtask1_03.txt | AC | 24 ms | 1308 KB |
subtask1_04.txt | AC | 27 ms | 1308 KB |
subtask1_05.txt | AC | 26 ms | 1288 KB |
subtask1_06.txt | AC | 27 ms | 1296 KB |
subtask1_07.txt | AC | 27 ms | 1308 KB |
subtask1_08.txt | AC | 25 ms | 1308 KB |
subtask1_09.txt | AC | 26 ms | 1432 KB |
subtask1_10.txt | AC | 27 ms | 1308 KB |
subtask1_11.txt | AC | 27 ms | 1304 KB |
subtask1_12.txt | AC | 27 ms | 1296 KB |
subtask1_13.txt | AC | 25 ms | 1312 KB |
subtask1_14.txt | AC | 25 ms | 1264 KB |
subtask1_15.txt | AC | 26 ms | 1288 KB |
subtask1_16.txt | AC | 29 ms | 1300 KB |
subtask1_17.txt | AC | 27 ms | 1308 KB |
subtask1_18.txt | AC | 25 ms | 1304 KB |
subtask1_19.txt | AC | 26 ms | 1292 KB |
subtask1_20.txt | AC | 26 ms | 1292 KB |
subtask1_21.txt | AC | 26 ms | 1240 KB |
subtask1_22.txt | AC | 27 ms | 1308 KB |
subtask1_23.txt | AC | 28 ms | 1316 KB |
subtask1_24.txt | AC | 28 ms | 1292 KB |
subtask1_25.txt | AC | 26 ms | 1304 KB |
subtask1_26.txt | AC | 25 ms | 1308 KB |