Submission #34034150
Source Code Expand
import Control.Monad
import qualified Data.ByteString.Char8 as BS
import Data.Char
import Data.List
import Data.Array
import qualified Data.IntMap as IM
import Control.Applicative
main = do
[n,m,e] <- bsGetLnInts
uvs <- replicateM e bsGetLnInts
[q] <- bsGetLnInts
xs <- replicateM q (head <$> bsGetLnInts)
let 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] -> [Int]
abc264e n m e uvs q xs = ccs
where
-- 0番が発電所、1~N 個は都市
uf0 = newUF (succ n)
-- 電線の配列
uvA = listArray (1,e) [(pp u, pp v) | (u:v:_) <- uvs]
pp x = if n < x then 0 else x
-- 電線が切れないかチェック表
uvX = accumArray (&&) True (1,e) [(x,False) | x <- xs]
-- 切れない電線を配線する
uf1 = foldl' {-'-} uniteUF uf0 [uv | (uv,True) <- zip (elems uvA) (elems uvX)]
-- 逆順に Xi を繋いだufを作りつつ、都市数を追跡
(_,ccs) = mapAccumR step uf1 xs
step uf xi = (uniteUF uf (uvA ! xi), pred cc1)
where
(pp, cc1) = getRoot uf 0
-- UnionFind
-- 編集が定数時間でできるIntMapを使ってみる
type UnionFind = IM.IntMap Int
-- 要素は 親id または 分割の要素数(負)
-- 0からNまでのN要素が独立した初期状態を作る
newUF :: Int -> UnionFind
newUF n = IM.fromAscList [(i,-1) | i <- [0..n]]
-- 補助関数 ノードの根まで辿り、代表idと分割の要素数を返す
getRoot :: UnionFind -> Int -> (Int,Int)
getRoot uf i = loop i
where
loop i
| k >= 0 = loop k
| True = (i, negate k)
where
k = uf IM.! i
-- ふたつのノードが同じ分割に属していることを登録する
uniteUF :: UnionFind -> (Int, Int) -> UnionFind
uniteUF uf (i, j)
| a == b = uf
| r <= s = IM.insert a b $ IM.insert b (negate $ r + s) uf
| True = IM.insert b a $ IM.insert a (negate $ r + s) uf
where
(a,r) = getRoot uf i
(b,s) = getRoot uf j
Submission Info
| Submission Time | |
|---|---|
| Task | E - Blackout 2 |
| User | joetheshootingst |
| Language | Haskell (GHC 8.8.3) |
| Score | 500 |
| Code Size | 2142 Byte |
| Status | AC |
| Exec Time | 2679 ms |
| Memory | 560644 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 | 5 ms | 3524 KiB |
| test_01.txt | AC | 1041 ms | 193936 KiB |
| test_02.txt | AC | 657 ms | 125328 KiB |
| test_03.txt | AC | 1200 ms | 381296 KiB |
| test_04.txt | AC | 563 ms | 120140 KiB |
| test_05.txt | AC | 138 ms | 37448 KiB |
| test_06.txt | AC | 282 ms | 66036 KiB |
| test_07.txt | AC | 445 ms | 99332 KiB |
| test_08.txt | AC | 999 ms | 319704 KiB |
| test_09.txt | AC | 863 ms | 178712 KiB |
| test_10.txt | AC | 424 ms | 149216 KiB |
| test_11.txt | AC | 773 ms | 234564 KiB |
| test_12.txt | AC | 203 ms | 93600 KiB |
| test_13.txt | AC | 790 ms | 279328 KiB |
| test_14.txt | AC | 366 ms | 120312 KiB |
| test_15.txt | AC | 354 ms | 88608 KiB |
| test_16.txt | AC | 501 ms | 151060 KiB |
| test_17.txt | AC | 1157 ms | 187056 KiB |
| test_18.txt | AC | 1345 ms | 387392 KiB |
| test_19.txt | AC | 1867 ms | 479776 KiB |
| test_20.txt | AC | 461 ms | 144880 KiB |
| test_21.txt | AC | 1378 ms | 245236 KiB |
| test_22.txt | AC | 561 ms | 156192 KiB |
| test_23.txt | AC | 1256 ms | 390480 KiB |
| test_24.txt | AC | 1175 ms | 273804 KiB |
| test_25.txt | AC | 1232 ms | 254800 KiB |
| test_26.txt | AC | 905 ms | 244832 KiB |
| test_27.txt | AC | 1088 ms | 266640 KiB |
| test_28.txt | AC | 1267 ms | 390632 KiB |
| test_29.txt | AC | 1106 ms | 267772 KiB |
| test_30.txt | AC | 443 ms | 144496 KiB |
| test_31.txt | AC | 826 ms | 254496 KiB |
| test_32.txt | AC | 474 ms | 155376 KiB |
| test_33.txt | AC | 1177 ms | 389456 KiB |
| test_34.txt | AC | 457 ms | 155472 KiB |
| test_35.txt | AC | 2679 ms | 547604 KiB |
| test_36.txt | AC | 1933 ms | 473572 KiB |
| test_37.txt | AC | 2020 ms | 560644 KiB |
| test_38.txt | AC | 1363 ms | 392720 KiB |
| test_39.txt | AC | 2013 ms | 558944 KiB |
| test_40.txt | AC | 1442 ms | 246096 KiB |