题目可以各种花样:
比如树状座位图逃生,每人在一个结点上每秒只能走一步,除了根节点其他结点只能容纳一个人,求最短移动时间;
比如给定一棵树,每个节点上有一只鸟,每秒钟每只鸟都可以从一个节点移动到相邻节点上,但每秒钟每条边只能承载一只鸟的飞行.问所有鸟移动到根节点(1号节点)所花的时间.
仔细分析这些题目都是求多叉树的子叉树上的最大结点数。
输入:
n行:第一行是结点数,其余n-1行是其他结点的相连结点;
样例:
6
2 1
3 2
4 3
5 2
6 1
输出:
最短移动时间
样例输出:4
代码:
#-*- coding:utf-8 -*-
import sys
def node(child,root):
num = 1
for i in dict[child]:
if i != root:
num = num + node(i,child)
return num
if __name__ == "__main__":
global dict
dict = {}
n = sys.stdin.readline() #按行输入
for i in range(int(n)-1):
line = sys.stdin.readline().strip('\n')
a = line.split(" ")[0]
b = line.split(" ")[1]
if a not in dict:
dict[a] = [b]
else:
dict[a].append(b)
if b not in dict:
dict[b] = [a]
else:
dict[b].append(a)
print(dict)
nodenum = 0
for i in dict['1']:
nodenum = max(nodenum,node(i,'1'))
print(nodenum)