Submission #12162135


Source Code Expand

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

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)

main = do
  [n, m] <- getIntList

  let inputPaths i seq | i > m    = return seq
                       | otherwise = do
                           [a, b, c] <- getIntList
                           inputPaths (i+1) (seq Seq.|> (c, i, a-1, b-1))

  paths <- inputPaths 1 (Seq.empty)
  let paths' = Seq.unstableSortBy (flip compare) paths

  uf <- newUF n

  let solve ps res
        | Seq.null ps = return res
        | otherwise = do
            let (c, i, x, y) Seq.:< ps' = Seq.viewl ps
            same <- sameUF uf x y
            unless same (uniteUF uf x y)
            let res' = if same then res else res Seq.|> i
            solve ps' res'

  res <- solve paths' (Seq.empty)
  mapM_ print (Seq.unstableSort res)

Submission Info

Submission Time
Task D - 楽しすぎる家庭菜園
User unnohideyuki
Language Haskell (GHC 7.10.3)
Score 0
Code Size 2949 Byte
Status TLE
Exec Time 2122 ms
Memory 258428 KiB

Judge Result

Set Name Sample Subtask1
Score / Max Score 0 / 0 0 / 400
Status
AC × 2
AC × 45
TLE × 15
Set Name Test Cases
Sample sample_01.txt, sample_02.txt
Subtask1 sample_01.txt, sample_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_1_26.txt, subtask_1_27.txt, subtask_1_28.txt, subtask_1_29.txt, subtask_1_30.txt, subtask_1_31.txt, subtask_1_32.txt, subtask_1_33.txt, subtask_1_34.txt, subtask_1_35.txt, subtask_1_36.txt, subtask_1_37.txt, subtask_1_38.txt, subtask_1_39.txt, subtask_1_40.txt, subtask_1_41.txt, subtask_1_42.txt, subtask_1_43.txt, subtask_1_44.txt, subtask_1_45.txt, subtask_1_46.txt, subtask_1_47.txt, subtask_1_48.txt, subtask_1_49.txt, subtask_1_50.txt, subtask_1_51.txt, subtask_1_52.txt, subtask_1_53.txt, subtask_1_54.txt, subtask_1_55.txt, subtask_1_56.txt, subtask_1_57.txt, subtask_1_58.txt, subtask_1_59.txt, subtask_1_60.txt
Case Name Status Exec Time Memory
sample_01.txt AC 2 ms 508 KiB
sample_02.txt AC 1 ms 380 KiB
subtask_1_03.txt AC 1 ms 508 KiB
subtask_1_04.txt AC 1 ms 508 KiB
subtask_1_05.txt AC 1 ms 508 KiB
subtask_1_06.txt AC 2 ms 764 KiB
subtask_1_07.txt AC 2 ms 764 KiB
subtask_1_08.txt AC 2 ms 764 KiB
subtask_1_09.txt AC 2 ms 764 KiB
subtask_1_10.txt AC 2 ms 764 KiB
subtask_1_11.txt AC 2 ms 764 KiB
subtask_1_12.txt AC 2 ms 764 KiB
subtask_1_13.txt AC 2 ms 764 KiB
subtask_1_14.txt AC 2 ms 764 KiB
subtask_1_15.txt AC 2 ms 764 KiB
subtask_1_16.txt AC 9 ms 2684 KiB
subtask_1_17.txt AC 9 ms 2684 KiB
subtask_1_18.txt AC 9 ms 2684 KiB
subtask_1_19.txt AC 9 ms 2684 KiB
subtask_1_20.txt AC 9 ms 2684 KiB
subtask_1_21.txt AC 9 ms 2684 KiB
subtask_1_22.txt AC 9 ms 2684 KiB
subtask_1_23.txt AC 9 ms 2684 KiB
subtask_1_24.txt AC 9 ms 2684 KiB
subtask_1_25.txt AC 9 ms 2684 KiB
subtask_1_26.txt AC 101 ms 17788 KiB
subtask_1_27.txt AC 100 ms 17788 KiB
subtask_1_28.txt AC 104 ms 17788 KiB
subtask_1_29.txt AC 102 ms 17788 KiB
subtask_1_30.txt AC 104 ms 17788 KiB
subtask_1_31.txt AC 101 ms 17788 KiB
subtask_1_32.txt AC 101 ms 17788 KiB
subtask_1_33.txt AC 101 ms 17788 KiB
subtask_1_34.txt AC 103 ms 17788 KiB
subtask_1_35.txt AC 101 ms 17788 KiB
subtask_1_36.txt AC 1300 ms 204156 KiB
subtask_1_37.txt AC 1305 ms 204156 KiB
subtask_1_38.txt AC 1318 ms 206204 KiB
subtask_1_39.txt AC 1325 ms 204284 KiB
subtask_1_40.txt AC 1315 ms 204156 KiB
subtask_1_41.txt AC 1334 ms 204156 KiB
subtask_1_42.txt AC 1316 ms 204156 KiB
subtask_1_43.txt AC 1319 ms 204156 KiB
subtask_1_44.txt AC 1308 ms 204156 KiB
subtask_1_45.txt AC 1304 ms 204156 KiB
subtask_1_46.txt TLE 2118 ms 257404 KiB
subtask_1_47.txt TLE 2120 ms 257404 KiB
subtask_1_48.txt TLE 2119 ms 257404 KiB
subtask_1_49.txt TLE 2119 ms 257404 KiB
subtask_1_50.txt TLE 2118 ms 258428 KiB
subtask_1_51.txt TLE 2122 ms 257404 KiB
subtask_1_52.txt TLE 2119 ms 257404 KiB
subtask_1_53.txt TLE 2120 ms 257404 KiB
subtask_1_54.txt TLE 2120 ms 257404 KiB
subtask_1_55.txt TLE 2118 ms 257404 KiB
subtask_1_56.txt TLE 2120 ms 258428 KiB
subtask_1_57.txt TLE 2119 ms 258428 KiB
subtask_1_58.txt TLE 2119 ms 258428 KiB
subtask_1_59.txt TLE 2118 ms 257404 KiB
subtask_1_60.txt TLE 2119 ms 257404 KiB