Submission #35149001


Source Code Expand

Copy
import Control.Monad
import qualified Data.ByteString.Char8 as BS
import Data.Char
import Data.List
import qualified Data.Vector.Unboxed.Mutable as MUV
import Control.Applicative
import qualified Data.IntMap as IM
import Control.Monad.ST
main = do
[n,m] <- bsGetLnInts
xs <- bsGetLnInts
ys <- bsGetLnInts
abzs <- replicateM m bsGetLnInts
let ans = abc270f n m xs ys abzs
print ans
bsGetLnInts :: IO [Int]
bsGetLnInts = BS.getLine >>= return . unfoldr (BS.readInt . BS.dropWhile isSpace)
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
import Control.Monad
import qualified Data.ByteString.Char8 as BS
import Data.Char
import Data.List

import qualified Data.Vector.Unboxed.Mutable as MUV
import Control.Applicative
import qualified Data.IntMap as IM

import Control.Monad.ST

main = do
  [n,m] <- bsGetLnInts
  xs <- bsGetLnInts
  ys <- bsGetLnInts
  abzs <- replicateM m bsGetLnInts
  let ans = abc270f n m xs ys abzs
  print ans

bsGetLnInts :: IO [Int]
bsGetLnInts = BS.getLine >>= return . unfoldr (BS.readInt . BS.dropWhile isSpace)

abc270f :: Int -> Int -> [Int] -> [Int] -> [[Int]] -> Int
abc270f n m xs ys abzs = minimum [c1,c2,c3,c4]
  where
    n1 = succ n
    n2 = succ n1
    bridges = sort [(z,(a,b)) | (a:b:z:_) <- abzs]
    airs = sort [(x,(i, 0)) | (i,x) <- zip [1..] xs]
    seas = sort [(y,(i,n1)) | (i,y) <- zip [1..] ys]
    ba = merge bridges airs
    c1 = if succ m < n then maxBound else sub n2 n bridges
    c2 = sub n2 n1 ba
    c3 = sub n2 n1 $ merge bridges seas
    c4 = sub n2 n2 $ merge ba seas

sub :: Int -> Int -> [(Int,(Int,Int))] -> Int
sub n cnt zabs = runST $
  do
    uf <- newUF n
    (cost, cnt1) <- foldM (\(cost, cnt) (z,(a,b)) -> do
      m <- uniteUF uf a b
      return $ if m then (cost + z, pred cnt) else (cost, cnt)
      ) (0, cnt) zabs
    return $ if cnt1 == 1 then cost else maxBound
  
------------------
-- @gotoki_no_joe
merge :: Ord a => [a] -> [a] -> [a]
merge xxs@(x:xs) yys@(y:ys) =
  case compare x y of
    EQ -> x : y : merge xs ys
    LT -> x : merge xs yys
    GT -> y : merge xxs ys
merge [] ys = ys
merge xs [] = xs

-- @gotoki_no_joe
type UnionFind s = MUV.MVector s Int

newUF :: Int -> ST s (UnionFind s)
newUF n = MUV.replicate n (-1)

getRoot :: UnionFind s -> Int -> ST s (Int, Int)
getRoot uf i = loop uf i []
  where
    loop uf i ks = do
      k <- MUV.read uf i
      if k >= 0 then loop uf k (i:ks) else do
        forM_ (drop 1 ks) (\k -> MUV.write uf k i)
        return (i, -k)

uniteUF :: UnionFind s -> Int -> Int -> ST s Bool
uniteUF uf i j = do
  (a, r) <- getRoot uf i
  (b, s) <- getRoot uf j
  if a == b then return False else
    if r >= s then do
      MUV.write uf a (negate $ r + s)
      MUV.write uf b a
      return True
    else do
      MUV.write uf b (negate $ r + s)
      MUV.write uf a b
      return True

Submission Info

Submission Time
Task F - Transportation
User joetheshootingst
Language Haskell (GHC 8.8.3)
Score 500
Code Size 2358 Byte
Status AC
Exec Time 2587 ms
Memory 254444 KB

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
AC × 3
AC × 41
Set Name Test Cases
Sample example_00.txt, example_01.txt, example_02.txt
All example_00.txt, example_01.txt, example_02.txt, hand_00.txt, hand_01.txt, hand_02.txt, hand_03.txt, hand_04.txt, hand_05.txt, hand_06.txt, hand_07.txt, random_00.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, random_21.txt, random_22.txt, random_23.txt, random_24.txt, random_25.txt, random_26.txt, random_27.txt, random_28.txt, random_29.txt
Case Name Status Exec Time Memory
example_00.txt AC 9 ms 3588 KB
example_01.txt AC 2 ms 3680 KB
example_02.txt AC 2 ms 3696 KB
hand_00.txt AC 1116 ms 171920 KB
hand_01.txt AC 1129 ms 169924 KB
hand_02.txt AC 1136 ms 172544 KB
hand_03.txt AC 269 ms 103908 KB
hand_04.txt AC 1014 ms 145152 KB
hand_05.txt AC 1054 ms 167996 KB
hand_06.txt AC 1208 ms 200284 KB
hand_07.txt AC 1228 ms 195868 KB
random_00.txt AC 2249 ms 246260 KB
random_01.txt AC 1333 ms 171456 KB
random_02.txt AC 2054 ms 236956 KB
random_03.txt AC 1329 ms 172396 KB
random_04.txt AC 2364 ms 252324 KB
random_05.txt AC 1255 ms 173604 KB
random_06.txt AC 2297 ms 253280 KB
random_07.txt AC 1315 ms 169488 KB
random_08.txt AC 1946 ms 217612 KB
random_09.txt AC 1492 ms 169600 KB
random_10.txt AC 2529 ms 253336 KB
random_11.txt AC 1349 ms 160836 KB
random_12.txt AC 2587 ms 254444 KB
random_13.txt AC 1501 ms 173476 KB
random_14.txt AC 2194 ms 242160 KB
random_15.txt AC 1499 ms 171144 KB
random_16.txt AC 2530 ms 253340 KB
random_17.txt AC 1460 ms 165348 KB
random_18.txt AC 2395 ms 241052 KB
random_19.txt AC 1563 ms 171564 KB
random_20.txt AC 2188 ms 228704 KB
random_21.txt AC 1489 ms 170504 KB
random_22.txt AC 2380 ms 243212 KB
random_23.txt AC 1429 ms 163332 KB
random_24.txt AC 2587 ms 249328 KB
random_25.txt AC 1506 ms 170404 KB
random_26.txt AC 2182 ms 220760 KB
random_27.txt AC 1544 ms 171492 KB
random_28.txt AC 2567 ms 248228 KB
random_29.txt AC 1537 ms 171180 KB


2025-04-22 (Tue)
08:39:13 +00:00