Submission #1636132
Source Code Expand
import Control.Applicative import Control.Monad import Debug.Trace import Data.Array.IO import Data.IORef -- two stack queue -- ref: Chris Okasaki "Purely Functional Data Structures" p.42 data Queue a = Node [a] [a] deriving (Show) queueEmpty = Node [] [] queueNull (Node [] []) = True queueNull (Node _ _) = False enqueue x (Node s1 s2) = Node s1 (x : s2) dequeue (Node [] s2) = dequeue (Node (reverse s2) []) dequeue (Node (s:s1) s2) = (s, Node s1 s2) main :: IO () main = do [n1, m1] <- map read . words <$> getLine e1 <- map (map read . words) <$> replicateM m1 getLine :: IO [[Int]] [n2, m2] <- map read . words <$> getLine e2 <- map (map read . words) <$> replicateM m2 getLine :: IO [[Int]] (mn1, mx1) <- solve n1 e1 (mn2, mx2) <- solve n2 e2 let mn = maximum [mn1 + mn2 + 1, mx1, mx2] let mx = mx1 + mx2 + 1 putStrLn $ show mn ++ " " ++ show mx solve :: Int -> [[Int]] -> IO (Int, Int) solve n es = do g <- newArray (0, n - 1) [] :: IO (IOArray Int [Int]) forM_ es $ \[u, v] -> do readArray g u >>= writeArray g u . (v:) readArray g v >>= writeArray g v . (u:) vals <- mapM (minmax n g) [0..n-1] let mn = minimum vals let mx = maximum vals return (mn, mx) minmax :: Int -> IOArray Int [Int] -> Int -> IO Int minmax n g u = do dist <- newArray (0, n - 1) (-1) :: IO (IOArray Int Int) writeArray dist u 0 let q = enqueue u queueEmpty d <- bfs dist g q dd <- getElems d return $ maximum dd bfs :: IOArray Int Int -> IOArray Int [Int] -> Queue Int -> IO (IOArray Int Int) bfs dist g (Node [] []) = return dist bfs dist g q1 = do let (u, q2) = dequeue q1 q <- newIORef q2 d <- readArray dist u es <- readArray g u forM_ es $ \v -> do dv <- readArray dist v when (dv == (-1)) $ do writeArray dist v (d + 1) modifyIORef q (enqueue v) bfs dist g =<< readIORef q
Submission Info
Submission Time | |
---|---|
Task | C - 直径 |
User | pekempey |
Language | Haskell (GHC 7.10.3) |
Score | 100 |
Code Size | 1918 Byte |
Status | AC |
Exec Time | 1317 ms |
Memory | 141692 KB |
Judge Result
Set Name | Small | Large | ||||
---|---|---|---|---|---|---|
Score / Max Score | 50 / 50 | 50 / 50 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Small | 10-small_random-00, 10-small_random-01, 10-small_random-02, 10-small_random-03, 10-small_random-04, 10-small_random-05, 10-small_random-06, 10-small_random-07, 10-small_random-08, 10-small_random-09, 10-small_random-10, 10-small_random-11, 10-small_random-12, 10-small_random-13, 10-small_random-14, 10-small_random-15, 10-small_random-16, 10-small_random-17, 10-small_random-18, 10-small_random-19, 21-small_path-00, 21-small_path-01, 21-small_path-02, 21-small_path-03, 21-small_path-04, 00-sample-00, 00-sample-01, 00-sample-02 |
Large | 00-sample-00, 00-sample-01, 00-sample-02, 10-small_random-00, 10-small_random-01, 10-small_random-02, 10-small_random-03, 10-small_random-04, 10-small_random-05, 10-small_random-06, 10-small_random-07, 10-small_random-08, 10-small_random-09, 10-small_random-10, 10-small_random-11, 10-small_random-12, 10-small_random-13, 10-small_random-14, 10-small_random-15, 10-small_random-16, 10-small_random-17, 10-small_random-18, 10-small_random-19, 20-small_tree-00, 20-small_tree-01, 20-small_tree-02, 20-small_tree-03, 20-small_tree-04, 21-small_path-00, 21-small_path-01, 21-small_path-02, 21-small_path-03, 21-small_path-04, 30-large_random-00, 30-large_random-01, 30-large_random-02, 30-large_random-03, 30-large_random-04, 30-large_random-05, 30-large_random-06, 30-large_random-07, 30-large_random-08, 30-large_random-09, 40-large_comp-00, 40-large_comp-01, 40-large_comp-02, 40-large_comp-03, 40-large_comp-04, 41-large_tree-00, 41-large_tree-01, 41-large_tree-02, 41-large_tree-03, 41-large_tree-04, 42-large_path-00, 42-large_path-01, 42-large_path-02, 42-large_path-03, 42-large_path-04 |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
00-sample-00 | AC | 2 ms | 636 KB |
00-sample-01 | AC | 2 ms | 636 KB |
00-sample-02 | AC | 2 ms | 508 KB |
10-small_random-00 | AC | 2 ms | 1020 KB |
10-small_random-01 | AC | 3 ms | 1020 KB |
10-small_random-02 | AC | 2 ms | 1020 KB |
10-small_random-03 | AC | 2 ms | 1020 KB |
10-small_random-04 | AC | 3 ms | 1020 KB |
10-small_random-05 | AC | 3 ms | 1020 KB |
10-small_random-06 | AC | 2 ms | 892 KB |
10-small_random-07 | AC | 2 ms | 892 KB |
10-small_random-08 | AC | 2 ms | 636 KB |
10-small_random-09 | AC | 3 ms | 1020 KB |
10-small_random-10 | AC | 2 ms | 1020 KB |
10-small_random-11 | AC | 2 ms | 1020 KB |
10-small_random-12 | AC | 3 ms | 1020 KB |
10-small_random-13 | AC | 2 ms | 508 KB |
10-small_random-14 | AC | 4 ms | 1020 KB |
10-small_random-15 | AC | 2 ms | 1020 KB |
10-small_random-16 | AC | 3 ms | 1020 KB |
10-small_random-17 | AC | 3 ms | 1020 KB |
10-small_random-18 | AC | 4 ms | 1020 KB |
10-small_random-19 | AC | 4 ms | 1020 KB |
20-small_tree-00 | AC | 9 ms | 1916 KB |
20-small_tree-01 | AC | 2 ms | 508 KB |
20-small_tree-02 | AC | 13 ms | 3068 KB |
20-small_tree-03 | AC | 2 ms | 508 KB |
20-small_tree-04 | AC | 665 ms | 89468 KB |
21-small_path-00 | AC | 2 ms | 636 KB |
21-small_path-01 | AC | 2 ms | 764 KB |
21-small_path-02 | AC | 2 ms | 508 KB |
21-small_path-03 | AC | 2 ms | 892 KB |
21-small_path-04 | AC | 2 ms | 1020 KB |
30-large_random-00 | AC | 137 ms | 5500 KB |
30-large_random-01 | AC | 3 ms | 1020 KB |
30-large_random-02 | AC | 19 ms | 2044 KB |
30-large_random-03 | AC | 2 ms | 892 KB |
30-large_random-04 | AC | 78 ms | 7548 KB |
30-large_random-05 | AC | 2 ms | 892 KB |
30-large_random-06 | AC | 28 ms | 3836 KB |
30-large_random-07 | AC | 5 ms | 1020 KB |
30-large_random-08 | AC | 1317 ms | 72060 KB |
30-large_random-09 | AC | 1312 ms | 72060 KB |
40-large_comp-00 | AC | 2 ms | 636 KB |
40-large_comp-01 | AC | 10 ms | 1404 KB |
40-large_comp-02 | AC | 5 ms | 1148 KB |
40-large_comp-03 | AC | 29 ms | 2428 KB |
40-large_comp-04 | AC | 96 ms | 5500 KB |
41-large_tree-00 | AC | 2 ms | 764 KB |
41-large_tree-01 | AC | 5 ms | 1276 KB |
41-large_tree-02 | AC | 9 ms | 1788 KB |
41-large_tree-03 | AC | 100 ms | 15740 KB |
41-large_tree-04 | AC | 673 ms | 90492 KB |
42-large_path-00 | AC | 33 ms | 8572 KB |
42-large_path-01 | AC | 2 ms | 1020 KB |
42-large_path-02 | AC | 3 ms | 1020 KB |
42-large_path-03 | AC | 259 ms | 65916 KB |
42-large_path-04 | AC | 607 ms | 141692 KB |