아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

트리

면접 대비

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

요약
무방향 그래프가 주어질 때 사이클이 없는 연결 성분의 개수를 세어 각 테스트 케이스마다 출력한다.
난이도

보통10점 중 5점

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

문제

그래프는 정점(vertex)과 간선(edge)으로 이루어진다. 두 정점 사이에 경로가 존재하면 그 두 정점은 서로 연결되어 있다고 한다. 연결 요소(connected component)는 그 안의 모든 정점이 서로 연결되어 있는 정점들의 부분집합이며, 하나의 그래프는 하나 이상의 연결 요소로 이루어진다.

트리(tree)는 사이클(cycle)이 없는 연결 요소이다. 트리는 여러 성질을 가진다. 예를 들어 정점이 nn개인 트리는 간선이 정확히 n−1n-1개이며, 임의의 두 정점 사이의 경로가 유일하다.

그래프가 주어졌을 때, 그 그래프에 들어 있는 트리의 개수를 세는 프로그램을 작성하시오. 정점 하나로만 이루어진 연결 요소도 간선이 00개여서 사이클이 없으므로 트리로 센다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫째 줄에는 정점의 개수 nn과 간선의 개수 mm이 주어지며, n≤500n \le 500, m≤n(n−1)/2m \le n(n-1)/2을 만족한다. 이어지는 mm개의 줄에는 각 간선을 나타내는 두 정수가 주어진다. 같은 간선이 두 번 이상 주어지는 경우는 없다. 정점은 11번부터 nn번까지 번호가 매겨져 있다. 입력의 마지막 줄에는 00이 두 개 주어진다.

출력

각 테스트 케이스마다 결과를 한 줄씩 출력한다. 그래프에 트리가 하나도 없으면 No trees., 정확히 한 개 있으면 There is one tree., TT개(T>1T > 1)이면 A forest of T trees.(여기서 T는 트리의 개수)를 출력한다. 각 줄은 Case X: 로 시작하며, XX는 11부터 시작하는 테스트 케이스 번호이다.

예제4

  1. 예제 1

    입력
    6 3
    1 2
    2 3
    3 4
    6 5
    1 2
    2 3
    3 4
    4 5
    5 6
    6 6
    1 2
    2 3
    1 3
    4 5
    5 6
    6 4
    0 0
    
    예상 출력
    Case 1: A forest of 3 trees.
    Case 2: There is one tree.
    Case 3: No trees.
    
  2. 예제 2

    입력
    1 0
    0 0
    
    예상 출력
    Case 1: There is one tree.
    
  3. 예제 3

    입력
    3 0
    0 0
    
    예상 출력
    Case 1: A forest of 3 trees.
    
  4. 예제 4

    입력
    3 3
    1 2
    2 3
    3 1
    0 0
    
    예상 출력
    Case 1: No trees.