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
いいなと思ったら応援しよう!
ありがとう