ssl1743 Debug 樹形記憶化搜尋

2021-10-09 05:04:39 字數 1506 閱讀 2514

bugzilla由n個基地組成。這n個基地被n-1段雙向地道連線在一起,每段地道都連線兩個基地,並且保證任意兩個基地之間都可以通過地道互相到達。bug就藏在其中的某段地道中。

開始時rc可以乘坐運輸機降落在任何乙個基地。每次到達乙個基地時,rc都可以選擇呼叫運輸機將他和他的部隊運輸到任意另乙個基地,或者進入與這個基地相鄰的一段地道進行搜尋。但為了防止bug跑進已經搜尋過的地道,他在離開乙個基地進入地道或登上運輸機時一定會將這個基地炸毀。基地一旦被炸毀就不再和與它相鄰的地道連線。但這樣一來,如果進入的地道另一端的基地已經在之前被炸毀,rc和他的部下就將被永遠困在地道中。因為地道生活並不有趣,所以在這種情況下rc是不會進入這段地道的。

不過,這也帶來了乙個問題,就是rc也許不能搜尋所有的地道了。現在rc想知道的是他最多能搜尋多少段地道。

第一行乙個整數n(2<=n<=100000),表示基地的個數。基地被編號為1~n的整數。

以下n-1行,每行兩個整數a和b,表示編號為a的基地和編號為b的基地間有一段地道。

乙個整數,表示rc最多能搜尋的地道的數目

612

3224

4546

4
資料範圍:

對於20%的資料,2 <= n <= 30

對於50%的資料,2 <= n <= 10000

先吐槽一波題目描述,其實大意:刪除最少的邊,使每個節點的度數小於等於2

證明:當這個點有大於1個葉子節點的時候,向下絕對會比向上更優。

因為如果和父節點連邊,必須放棄所有的葉子節點,這樣就會放棄所有與子節點相連的邊,比刪除與父節點連線的一條邊還多,沒那麼優。

其他的就跟樹形dp差不多,記憶化&遞迴一下,鄰接表儲存。

#include

#include

#include

#include

using

namespace std;

int n,h[

100001

],v[

100001

],s[

100001

],ans,tot;

struct node

a[200001];

void

add(

int x,

int y)

; h[x]

=tot;

}void

dfs(

int k,

int f)

for(

int i=h[k]

;i>

0;i=a[i]

.next)

if(s[k]

>2)

}int

main()

dfs(1,

0); cout

return0;

}

MT 174 凹凸無妨

已知函式 f x x 3 3x 2 ax b 對任意 a,b in r 存在 x in 3,0 使得 f x le m 成立,求 m 的範圍.求 displaystyle min max x 3 3x 2 ax b 解 由於 begin 6m a,b geq 2 f 3 3 f 2 f 0 geq ...

174 按奇偶排序陣列

題目描述 給定乙個非負整數陣列 a,返回乙個由 a 的所有偶數元素組成的陣列,後面跟 a 的所有奇數元素。你可以返回滿足此條件的任何陣列作為答案。示例 輸入 3,1,2,4 輸出 2,4,3,1 輸出 4,2,3,1 2,4,1,3 和 4,2,1,3 也會被接受。1 a.length 5000 0...

Cadence 17 4使用心得

目錄概述 1 新手學習 2 老手學習 作為eda中的佼佼者,學習cadence。還是有必要的,不管是出於興趣還是以後從事高薪工作,從目前市場來看,使用比較多的eda分別是 ad pads cadence,包括現在比較出名的嘉立創,它們也出來乙個eda工具,也比較優秀,分別支援網頁版本與pc端版本。學...