緊急疏散 python

2021-09-18 03:48:39 字數 1765 閱讀 4051

題目描述:

體育場突然著火了,現場需要緊急疏散,但是過道真的是太窄了,同時只能容許乙個人通過。現在知道了體育場的所有座位分布,座位分布圖是一棵樹,已知每個座位上都坐了乙個人,安全出口在樹的根部,也就是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號結點的位置上。其他節點上的人每秒都能向樹根部前進乙個結點,但是除了安全出口以外,沒有任何乙個結點可以同時容納...