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