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
AC × 4
AC × 30
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