緊急避難(python)

2101 ワード

タイトルの説明:
スタジアムが突然火事になり、現場は緊急避難が必要になったが、通路は本当に狭く、同時に一人で通過することを許すしかなかった.スタジアムのすべての座席の分布がわかり、座席分布図は木で、各座席に一人が座っていることが知られています.安全出口は木の根元、つまり1番の接点の位置にあります.他のノードの人は毎秒1つのノードに進むことができますが、安全な出口を除いて、2つ以上の人を同時に収容できるノードはありません.これは、人々ができるだけ早く避難できるようにする戦略が必要です.最適な戦略を取った場合、スタジアムが最も早くどのくらいのsh時間で避難できるかを聞いてみましょう.(2019京東アルゴリズム実習募集)
入力:
最初の行は、ツリーのノード数(1<=n<=10000000)の整数nを含む.
次にn−1行があり、各行に2つの正の整数x,yがあり、xとyノードの間に1つのエッジが存在することを示す.(1<=x<=y<=n)
出力:
出力には、必要な最短時間を表す正の整数のみが含まれます.
サンプル入力:
6
2 1
3 2
4 3
5 2
6 1
サンプル出力:
4
#      ,   1       ,                ,      
import sys

#all_list       1     ,  2、4 1    , all_list [[2],[4]]
#temp      1        ,  [2,3],[4,5]  1    , temp [[2,3],[4,5]]
all_list = list()
temp = list()

#        ,         
num = int(sys.stdin.readline().strip())

line = sys.stdin.readline().strip()
while len(line):
    two = list(map(int,line.split(' ')))
    #        1,          all_list ,        temp  
    if two[0] == 1 or two[1] == 1:
        #        1
        if two[0] == 1:
            all_list.append([two[1]])
        else:
            all_list.append([two[0]])
    else:
        temp.append(two)
    line = sys.stdin.readline().strip()
    
#          ,     1      list      all_list 
index_ = list()
while len(temp) != 0:
    #    temp  ,       all_list     
    for i in range(len(temp)):
        #   temp      all_list          
        for j in range(len(all_list)):
            #     all_list ,      
            if temp[i][0] in all_list[j] or temp[i][1] in all_list[j]:
                if temp[i][0] in all_list[j]:
                    all_list[j].append(temp[i][1])
                else:
                    all_list[j].append(temp[i][0])
                index_.append(temp[i])
    for i in range(len(index_)):
        temp.remove(index_[i])
                    
#  all_list           
max_len = 0
for i in range(len(all_list)):
    len_ = len(all_list[i])
    if len_ > max_len:
        max_len = len_
        
print(max_len)

菜鳥一枚、コードは参考までに、問題があれば、指摘してください.