Submission #34031960
Source Code Expand
import Control.Monad
import qualified Data.ByteString.Char8 as BS
import Data.Char
import Data.List
import Data.Array
import Control.Applicative
import qualified Data.Vector.Unboxed.Mutable as MUV
main = do
[n,m,e] <- bsGetLnInts
uvs <- replicateM e bsGetLnInts
[q] <- bsGetLnInts
xs <- replicateM q (head <$> bsGetLnInts)
ans <- abc264e n m e uvs q xs
mapM_ print ans
bsGetLnInts :: IO [Int]
bsGetLnInts = BS.getLine >>= return . unfoldr (BS.readInt . BS.dropWhile isSpace)
abc264e :: Int -> Int -> Int -> [[Int]] -> Int -> [Int] -> IO [Int]
abc264e n m e uvs q xs =
do
-- 0番が発電所、1~N 個は都市
uf <- newUF (succ n)
-- 切れない電線を配線する
sequence_ [uniteUF uf u v | ((u,v),True) <- zip (elems uvA) (elems uvX)]
-- 逆順に Xi を繋ぎつつ、都市数を追跡
ansS <- mapM (action uf) (map (uvA !) $ reverse xs)
return $ reverse ansS
where
-- 電線の配列(発電所は0に統合)
uvA = listArray (1,e) [(pp u, pp v) | (u:v:_) <- uvs]
pp x
| x <= n = x
| otherwise = 0
-- 電線が切れないかチェック表
uvX = accumArray (&&) True (1,e) [(x,False) | x <- xs]
action uf (u, v) =
do
pp <- getRoot uf 0
a <- MUV.read uf pp
uniteUF uf u v
return (pred $ negate a)
-- UnionFind
type UnionFind = MUV.IOVector Int
newUF :: Int -> IO UnionFind
newUF n = MUV.replicate n (-1)
getRoot :: UnionFind -> Int -> IO Int
getRoot vec i = loop i []
where
loop :: Int -> [Int] -> IO Int
loop i ks =
do
k <- MUV.read vec i
if k < 0 then
do
forM_ ks (\k -> do MUV.write vec k i) -- 経路圧縮
return i
else
loop k (i:ks)
uniteUF :: UnionFind -> Int -> Int -> IO Bool
uniteUF vec i j =
do
a <- getRoot vec i
b <- getRoot vec j
if a == b then return False else
do
r <- MUV.read vec a
s <- MUV.read vec b
if r < s then
do
MUV.write vec a b
MUV.write vec b (r+s)
else do
MUV.write vec b a
MUV.write vec a (r+s)
return True
Submission Info
| Submission Time | |
|---|---|
| Task | E - Blackout 2 |
| User | joetheshootingst |
| Language | Haskell (GHC 8.8.3) |
| Score | 500 |
| Code Size | 2229 Byte |
| Status | AC |
| Exec Time | 1224 ms |
| Memory | 367876 KiB |
Compile Error
Loaded package environment from /home/contestant/.ghc/x86_64-linux-8.8.3/environments/default
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 500 / 500 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | sample_01.txt |
| All | sample_01.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| sample_01.txt | AC | 6 ms | 3584 KiB |
| test_01.txt | AC | 532 ms | 154124 KiB |
| test_02.txt | AC | 375 ms | 118288 KiB |
| test_03.txt | AC | 1224 ms | 343932 KiB |
| test_04.txt | AC | 336 ms | 116016 KiB |
| test_05.txt | AC | 65 ms | 29960 KiB |
| test_06.txt | AC | 144 ms | 58180 KiB |
| test_07.txt | AC | 244 ms | 101100 KiB |
| test_08.txt | AC | 935 ms | 258356 KiB |
| test_09.txt | AC | 434 ms | 121200 KiB |
| test_10.txt | AC | 417 ms | 122236 KiB |
| test_11.txt | AC | 746 ms | 225772 KiB |
| test_12.txt | AC | 202 ms | 93500 KiB |
| test_13.txt | AC | 746 ms | 227780 KiB |
| test_14.txt | AC | 368 ms | 120200 KiB |
| test_15.txt | AC | 83 ms | 33072 KiB |
| test_16.txt | AC | 142 ms | 49200 KiB |
| test_17.txt | AC | 302 ms | 113564 KiB |
| test_18.txt | AC | 1161 ms | 363356 KiB |
| test_19.txt | AC | 465 ms | 132316 KiB |
| test_20.txt | AC | 340 ms | 143252 KiB |
| test_21.txt | AC | 813 ms | 234892 KiB |
| test_22.txt | AC | 471 ms | 133372 KiB |
| test_23.txt | AC | 1197 ms | 367872 KiB |
| test_24.txt | AC | 496 ms | 135332 KiB |
| test_25.txt | AC | 731 ms | 226804 KiB |
| test_26.txt | AC | 403 ms | 124176 KiB |
| test_27.txt | AC | 498 ms | 135028 KiB |
| test_28.txt | AC | 1191 ms | 367664 KiB |
| test_29.txt | AC | 494 ms | 134980 KiB |
| test_30.txt | AC | 438 ms | 124320 KiB |
| test_31.txt | AC | 799 ms | 231784 KiB |
| test_32.txt | AC | 450 ms | 132640 KiB |
| test_33.txt | AC | 1171 ms | 367876 KiB |
| test_34.txt | AC | 443 ms | 132600 KiB |
| test_35.txt | AC | 1017 ms | 245136 KiB |
| test_36.txt | AC | 827 ms | 236904 KiB |
| test_37.txt | AC | 485 ms | 137052 KiB |
| test_38.txt | AC | 1211 ms | 367820 KiB |
| test_39.txt | AC | 475 ms | 137348 KiB |
| test_40.txt | AC | 815 ms | 232872 KiB |