树的应用
#描述#
庭中有奇树,绿叶发华滋。攀条折其荣,将以遗所思。—— 《古诗十九首》<br>
<br>
<Tree——「树」。树是一种很特别的图。树的定义是:任两点之间都相通,并且没有环的图。<br>
<center><img src = "http://bbs.zjut.com/attachments/forumid_369/11103000437bed54c705bbffe4.png"></center>
<br>
树的定义对部分同学来说或许太过抽象。换个说法吧:一棵树可想做是由一个点开始,藉由许多条边不断地延伸拓展到其他点,而且点和边都不会重复地被拓展到。<br>
<center><img src = "http://bbs.zjut.com/attachments/forumid_369/1110300043d3b098f42627c7f5.png"></center>
<br>
Node——「节点」。进行延伸拓展的点、被延伸拓展到的点,称作「节点」,也就是说树上的点都是「节点」。<br>
<br>
【注:为了方便,以下仍称呼「点」。 】
<center><img src="http://bbs.zjut.com/attachments/forumid_369/111030004324e997999e51e32a.png"></center><br>
<br>
Branch——「枝」。延伸拓展所用到的边称作「枝」,也就是说树上的边都是「枝」。一个点藉由边往外延伸拓展,称做「分枝( Branching )」。
<br>
【注:为了方便,以下仍称呼「边」。 】
<center><img src="http://bbs.zjut.com/attachments/forumid_369/11103000437b1db3c04b31f6e8.png"></center><br>
<br>
Root——「根」。方才提到,一棵树可想做是由一个点开始分枝──这个点便是「根」。一棵树上的每一个点都可以做为根。<br>
<center><img src="http://bbs.zjut.com/attachments/forumid_369/1110300043aa5f0388331055eb.png"></center><br>
<br>
Leaf——「叶」。在一棵树上选定根后,由根开始不断分枝,途中所有无法继续分枝的点皆是「叶」。
<center><img src="http://bbs.zjut.com/attachments/forumid_369/1110300043172aebb4e92bd7e0.png"></center><br>
<br>
另一种说法是:除了根以外,只连着一条边的点就是叶。但这种说法有个例外:如果树上总共只有一个点,那么此点既是根、也是叶。<br>
<br>
树的特性<br>
1. 树没有环。<br>
2. 任意两点之间只有唯一一条路径。<br>
3. 树上所有点之间都相连通。<br>
4. 在树上任意添加一条边,就会产生环。<br>
5. 在树上任意删除一条边,一颗树就裂成两棵树。<br>
6. 边数等于点数减一。<br>
<br>
MatRush耐心地讲解完树的基础知识后,请你帮忙他求一下,从任意一个叶子走到另一个叶子,至多需要多少步?
<center><img src="http://bbs.zjut.com/attachments/forumid_369/111030004303ec5e56cd07f43f.png"></center><br>
#格式#
##输入格式##
输入的第一行包含一个整数 T,表示测试数据的组数。每组数据首先一行包含一棵树的结点个数N(1 <= N <= 1000),接下来有N-1行,每行包含两个数x, y(1 <= x,y <= N),表示x和y之间有一条边。数据保证所构成的是一棵树。
##输出格式##
对于每组数据,输出一行,即所求的步数。
#样例1#
##样例输入1##
1
5
1 2
2 3
2 4
4 5
##样例输出1##
3
#限制#
1000ms
32768KB
#提示#
步数即所经过边数
#来源#
MatRush