見出し画像

Data.Tree.flatten が使える

競プロ典型 90 問 21 日目 - Come Back in One Piece(★5)

import Control.Monad
import qualified Data.ByteString.Char8 as C
import Data.Graph
import Data.List
import Data.Tree

main = intm >>= print . sol

intm = map (unfoldr (C.readInt . C.dropWhile (==' '))) . C.lines <$> C.getContents

sol ((n:_):es) = sum . map (comb . length . flatten) $ scc g
  where
  g = buildG (1,n) $ map (\[a,b] -> (a,b)) es
  comb p = p*(p-1) `div` 2

いいなと思ったら応援しよう!

karoyakani
ありがとう