樹形dp vijos1144小胖守皇宮

2022-05-20 03:52:44 字數 1205 閱讀 9097

細節很精妙

huyichen世子事件後,xuzhenyi成了皇上特聘的御前一品侍衛。

皇宮以午門為起點,直到後宮嬪妃們的寢宮,呈一棵樹的形狀;某些宮殿間可以互相望見。大內保衛森嚴,三步一崗,五步一哨,每個宮殿都要有人全天候看守,在不同的宮殿安排看守所需的費用不同。

可是xuzhenyi手上的經費不足,無論如何也沒法在每個宮殿都安置留守侍衛。

幫助xuzhenyi布置侍衛,在看守全部宮殿的前提下,使得花費的經費最少。

輸入格式

輸入檔案中資料表示一棵樹,描述如下:

第1行 n,表示樹中結點的數目。

第2行至第n+1n+1行,每行描述每個宮殿結點資訊,依次為:該宮殿結點標號i(0

對於乙個n(0 < n \le 15000

輸出格式

輸出檔案僅包含乙個數,為所求的最少的經費。

有些細節處理真的是非常精妙。

分析詳見初涉樹形dp【權最小點覆蓋】vijos1144皇宮看守

1 #include2

const

int maxn = 2003;3

4int f[maxn][3

],a[maxn],n,rt;

5int head[maxn],nxt[maxn<<1],edges[maxn<<1

],edgetot;

6bool

vis[maxn];78

intread()

920 inline int min(int a, int b)

21 inline int min(int a, int b, int c)

22void addedge(int u, int

v)23

27void dfs(int

now)

2839 delta = std::max(delta, 0

);40 f[now][1] +=delta;41}

42int

main()

4352 rt = 1;53

while (vis[rt]) rt++;

54dfs(rt);

55 printf("

%d\n

",min(f[rt][1], f[rt][2

]));

56return0;

57 }

end

DP vijos1037 搭建雙塔

問題描述 2001年9月11日,一場突發的災難將紐約世界 中心大廈夷為平地,mr.f曾親眼目睹了這次災難。為了紀念 9?11 事件,mr.f決定自己用水晶來搭建一座雙塔。mr.f有n塊水晶,每塊水晶有乙個高度,他想用這n塊水晶搭建兩座有同樣高度的塔,使他們成為一座雙塔,mr.f可以從這n塊水晶中任取...

樹形DP 樹形DP四例

是時候練一下dp了!我的題單 portkey f u,if fu,i 表示以u uu為根節點的子樹中保留i ii條樹枝的最大蘋果數 f u,i max f max f fu,i max這些題是菜,但也不能輕視啊!include using namespace std define in read i...

樹形操作1 樹形拖拽選擇

樹形運算元據,做個整理總結。本篇是關於樹節點拖拽選擇,重新生成一棵新樹,並支援刪除節點。demo 是基於 jquery 及 easy ui 庫實現的。截圖 利用 css3 實現。主要運用了 before,after選擇器 畫 了兩個圓,然後利用border進行圓的調整,最後利用animation及t...