【问题描述】
树是一种大家都不陌生的数据结构,它有可能是一颗空树或是一些满足要求的节点连接而成的有向边的集合。
一棵树只有一个根节点,根节点没有指向它的边。
除了根节点的每一个节点都只有一条边指向它。
出现环的图都不是树。
对一些节点连接而成的有向边的集合进行判定,判定每一组的输入数据构成的图是否是一棵树。
【输入】
每输入一对都为0的数时,表示一组数据输入完毕。每条边由一对正整数表示,第一个数为有向边的起始点,第二个数为有向边的终止点。一对负数的输入表示输入的结束。
【输出】
每组测试数据输出一行判定结果,若输入的图为树,则输出“Case k is a tree.”,否则输出“Case k is not a tree.”。其中k表示每组数据的编号(编号从1开始)。
【解题报告】
运用并查集可以判定一个图是否为树。
根据树的定义与特点,需考虑的情况有:
(1)树中节点至多只能有一个父节点;
(2)树中不能出现环;
(3)构成的图只能有一个根节点,否则构成的将是森林而不是一棵树。
通过观察输入输出可知,题中编号是随即的,所以在编程中要对出现的点标记才能判断。
Step1:对每对输入的根节点标记表示这些节点出现过,进行并操作。并操作时两个节点不能有相同的根节点否则将构成环;假设b节点要接到a上,则要保证b节点是一个根节点,否则若进行并操作,b将会有两个父节点;若无以上情况,则可以合并两棵树。
Step 2:每组数据输入结束后&#