題目描述
整個公司的人員結構可以看作是一棵標準的多叉樹。樹的頭節點是公司唯一的老闆,除老闆外,每個員工都有唯一的直接上級,葉節點是沒有任何下屬的基層員工,除基層員工外,每個員工都有乙個或多個直接下級,另外每個員工都有乙個快樂值。
這個公司現在要辦 party,你可以決定哪些員工來,哪些員工不來。但是要遵循如下的原則:
1.如果某個員工來了,那麼這個員工的所有直接下級都不能來。
2.派對的整體快樂值是所有到場員工快樂值的累加。
3.你的目標是讓派對的整體快樂值盡量大。
給定一棵多叉樹,請輸出派對的最大快樂值。
輸入描述:
第一行兩個整數 n 和 root,n 表示公司的總人數,root 表示公司的老闆。
接下來 n - 1 行每行兩個整數 u_i 和 v_i 表示 u_i 是 v_i 的直接上級。
輸出描述:
輸出乙個整數表示最大快樂值。
示例1輸入
3 15 1 1
1 21 3輸出5
#include
using
namespace std;
struct employee };
struct info };
info*
process
(employee* x)
int yes = x-
int no =0;
for(employee* next : x-
>subordinates)
return
newinfo
(yes, no);}
int(employee* boss)
info *all =
process
(boss)
;return std::
max(all-
>yes, all-
>no);}
intmain()
);for(
int i =
0; i < n;
++i)
int boss, sub;
for(
int i =
0; i < n -
1; i++
)int res =
(all_people[root]);
cout << res;
return0;
}
滑動視窗的最大值 佇列的最大值
請定義乙個佇列並實現函式max得到佇列裡的最大值,要求函式max push back和 pop front的時間複雜度都是o 1 在佇列中維護乙個儲存最大值的佇列,當pop和push操作的同時也對最大值佇列進行維護。當彈出的時佇列中的最大值時,也彈出最大值佇列的頭,當壓入新值時,對最大值佇列從後向前...
最大值的選取
如果問題中各資料的範圍明確,那麼無窮大的設定不是問題,在不明確的情況下,很多程式設計師都取0x7fffffff作為無窮大,因為這是32 bit int的最大值。如果這個無窮大只用於一般的比較 比如求最小值時min變數的初值 那麼0x7fffffff確實是乙個完美的選擇,但是在更多的情況下,0x7ff...
rand 的最大值
rand 函式是乙個在開發的時候比較常用的函式,但這個函式返回隨機數的取值範圍並非多大的值都可以,在工作修乙個 活動bug的時候曾經遇到這樣一種情況,當總權重大於rand的最大值2 16 32767的時候,rand返回的值將不會大於32767,也就是說後面的獎勵將永遠不會被抽到。int cdecl ...