緊急疏散(最大子樹)

2021-10-02 23:14:33 字數 883 閱讀 5091

體育場突然著火了,現場需要緊急疏散,但是過道真的是太窄了,同時只能容許乙個人通過。現在知道了體育場的所有座位分布,座位分布圖是一棵樹,已知每個座位上都坐了乙個人,安全出口在樹的根部,也就是1號結點的位置上。其他節點上的人每秒都能向樹根部前進乙個結點,但是除了安全出口以外,沒有任何乙個結點可以同時容納兩個及以上的人,這就需要一種策略,來使得人群盡快疏散,問在採取最優策略的情況下,體育場最快可以在多長時間內疏散完成。

第一行包含乙個正整數n,即樹的結點數量(1<=n<=100000)。 接下來有n-1行,每行有兩個正整數x,y,表示在x和y結點之間存在一條邊。(1<=x,y<=n)。

輸出僅包含乙個正整數,表示所需要的最短時間。

按照題目的設定,每一次每一棵子樹都會有乙個節點通過出口成功離開,但是對於每一棵子樹來說,一次只能離開乙個,那麼無論採取什麼樣的措施,如果一棵子樹有m個節點,則需要m個單位時間,所以對於整棵樹來說,總共花費的時間就是最大的子樹的節點數,因此這道題本質上就是求最大子樹。

由於這裡每一行輸入的是一條邊的兩個端點,可以將其作為無向圖儲存。

#include

#include

using

namespace std;

vectorint>

>

data

(100010

,vector<

int>()

);intgettreesum

(int i,

int pre)

intmaxsubtree()

return max;

}int

main()

int sum=

maxsubtree()

; cout

}

最大流 緊急疏散evacuate

時間限制 1 sec 記憶體限制 128 mb 發生了火警,所有人員需要緊急疏散!假設每個房間是乙個n m的矩形區域。每個格仔如果是 那麼表示這是一塊空地 如果是 x 那麼表示這是一面牆,如果是 d 那麼表示這是一扇門,人們可以從這兒撤出房間。已知門一定在房間的邊界上,並且邊界上不會有空地。最初,每...

緊急疏散 python

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

尋找最大子樹

問題描述 給乙個二叉樹,每個節點都是正或負整數,如何找到乙個子樹,它所有節點的和最大?思路 採用自底向上的計算。先計算左右子樹總和值,用左右子樹的總和加上當前節點值,如果當前總和大於最大值,則更新最大值,同時將最大子樹根節點更新為當前根。簡單說,就是後序遍歷。include include usin...