題目描述:
體育場突然著火了,現場需要緊急疏散,但是過道真的是太窄了,同時只能容許乙個人通過。現在知道了體育場的所有座位分布,座位分布圖是一棵樹,已知每個座位上都坐了乙個人,安全出口在樹的根部,也就是1號結點的位置上。其他節點上的人每秒都能向樹根部前進乙個結點,但是除了安全出口以外,沒有任何乙個結點可以同時容納兩個及以上的人,這就需要一種策略,來使得人群盡快疏散,問在採取最優策略的情況下,體育場最快可以在多長sh時間內疏散完成。(2019京東演算法實習招聘)
輸入:第一行包括乙個整數n,即樹的結點數量(1<=n<=100000)
接下來有n-1行,每行有兩個正整數x,y,表示在x和y結點之間存在一條邊。(1<=x<=y<=n)
輸出:輸出僅包含乙個正整數,表示所需要的最短時間
樣例輸入:
2 13 2
4 35 2
6 1樣例輸出:
#定義乙個列表,存放和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:
else:
else:
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]:
else:
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)
菜鳥一枚,**僅供參考,如有問題,望指正~ 最大流 緊急疏散evacuate
時間限制 1 sec 記憶體限制 128 mb 發生了火警,所有人員需要緊急疏散!假設每個房間是乙個n m的矩形區域。每個格仔如果是 那麼表示這是一塊空地 如果是 x 那麼表示這是一面牆,如果是 d 那麼表示這是一扇門,人們可以從這兒撤出房間。已知門一定在房間的邊界上,並且邊界上不會有空地。最初,每...
HNOI2007 緊急疏散
二分 網路流判定 首先處理出每個人和門間的距離 二分時間,連邊時把每個門拆成mid個,乙個人能在mid時間內到達,他也可以在這等一會兒,那麼這mid個門之間連邊 如果可以在x的時間內到達,那麼x mid之間他都可以出去,所以門向門加一連邊 奉上未ac 千萬別複製 include define il ...
緊急疏散(最大子樹)
體育場突然著火了,現場需要緊急疏散,但是過道真的是太窄了,同時只能容許乙個人通過。現在知道了體育場的所有座位分布,座位分布圖是一棵樹,已知每個座位上都坐了乙個人,安全出口在樹的根部,也就是1號結點的位置上。其他節點上的人每秒都能向樹根部前進乙個結點,但是除了安全出口以外,沒有任何乙個結點可以同時容納...