#P1308. Is It A Tree?

Is It A Tree?

题目描述

树是一种广为人知的数据结构,它要么为空(空集、无、不存在),要么是由一个或多个节点组成的集合,这些节点通过满足以下属性的有向边相互连接:

  1. 恰好存在一个节点,称为根节点,没有有向边指向它。
  2. 除根节点外的每个节点都恰好有一条边指向它。
  3. 从根节点到每个节点都存在唯一的有向边序列。

例如,考虑下面的图示,其中节点用圆圈表示,边用带箭头的线条表示。下面前两个图示是树,而最后一个不是。

在这个问题中,你将得到几个由有向边连接的节点集合的描述。对于每个描述,你需要判断该集合是否满足树的定义。

输入

输入将由一系列的描述(测试用例)组成,后面跟着一对负整数。每个测试用例将由一系列的边描述组成,后面跟着一对零。每条边描述将由一对整数组成;第一个整数标识边的起始节点,第二个整数标识边所指向的节点。节点编号总是大于零。

输出

对于每个测试用例,显示一行内容:“Case k is a tree.”(第kk个用例是一棵树) 或 “Case k is not a tree.”(第kk个用例不是一棵树),其中kk对应于测试用例的编号(它们从11开始按顺序编号)。

输入示例

6 8  5 3  5 2  6 4
5 6  0 0

8 1  7 3  6 2  8 9  7 5
7 4  7 8  7 6  0 0

3 8  6 8  6 4
5 3  5 6  5 2  0 0
-1 -1

输出示例

Case 1 is a tree.
Case 2 is a tree.
Case 3 is not a tree.

来源

1997年北美中北部地区竞赛