도미노 2

면접 대비

시간 제한1초메모리 제한128 MB

요약
도미노 사이의 방향 간선과 손으로 넘어뜨리는 도미노가 주어질 때, 최종적으로 넘어지는 도미노의 수를 센다.
난이도

보통10점 중 4점

유형
그래프, DFS, BFS, 구현
정답자
아직 제출이 없습니다

문제

도미노는 아주 재미있다. 아이들은 타일을 옆으로 세워 긴 줄로 늘어놓는 것을 좋아한다. 도미노 하나가 쓰러지면 다음 것을 쓰러뜨리고, 그것이 또 그다음 것을 쓰러뜨리며 줄을 따라 계속 이어진다. 그러나 때로는 어떤 도미노가 다음 도미노를 쓰러뜨리지 못해서, 연쇄를 다시 이어가려면 손으로 직접 쓰러뜨려야 한다.

손으로 쓰러뜨린 도미노들의 집합이 주어질 때, 쓰러지는 도미노의 총 개수를 구하여라.

도미노들은 방향이 있는 구조를 이룬다. 어떤 도미노가 쓰러지면 특정한 다른 도미노를 쓰러지게 만든다. 한 도미노는 손으로 쓰러뜨려졌거나, 이미 쓰러진 어떤 도미노가 (직접 또는 연쇄를 통해) 그것을 쓰러뜨릴 때 쓰러진다. 최종적으로 쓰러진 모든 도미노의 수를 세면 된다.

입력

첫 줄에는 테스트 케이스의 수 TT가 주어진다. 각 테스트 케이스는 세 정수 nn, mm, ll이 있는 줄로 시작하며, 세 값 모두 1000010000 이하이다. 그 뒤에 m+lm + l개의 줄이 이어진다. nn은 도미노의 개수이고, 도미노는 11부터 nn까지 번호가 매겨져 있다. 처음 mm개의 줄에는 각각 두 정수 xx와 yy가 주어지며, 도미노 xx가 쓰러지면 도미노 yy도 쓰러진다는 뜻이다. 이어지는 ll개의 줄에는 각각 정수 zz가 하나씩 주어지며, 도미노 zz가 손으로 쓰러뜨려졌다는 뜻이다.

출력

각 테스트 케이스마다 쓰러지는 도미노의 총 개수를 정수 하나로 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    1
    3 2 1
    1 2
    2 3
    2
    
    예상 출력
    2
    
  2. 예제 2

    입력
    1
    3 2 1
    1 2
    2 3
    1
    
    예상 출력
    3