VIJOS P1144 小胖守皇宮(樹形dp)

2021-07-04 08:51:32 字數 775 閱讀 9309

對於每乙個節點,有3種狀態:自己守自己,被兒子守,被父親守;每次用兒子更新父節點。

設f [st][0]表示被自己守,它的兒子三種狀態都可以;

f[st][2]表示被父親守,那麼這個節點不能守它的兒子,它的兒子有兩種狀態:被自己守,被兒子守;

f[st][1]表示被兒子守。當兒子的最優狀態為自己守自己,這就非常和諧。但兒子的最優狀態可能是被它的兒子守啊,這時要加上f[to][0] - f[to][1]。

f[st][1]=min(f[st][1],f[st][2]+f[to][0]-min(f[to][0],f[to][1]));此時f[st][2]不表示被父親守的狀態,而是從這個點往下,這個點愛守不守的最優狀態。

#include#include#includeusing namespace std;

#define inf 1505

struct node

edge[inf<<2];

int head[inf<<2];

int cnt;

void add(int f,int t)

int n;

int w[inf],in[inf],f[inf][4],vis[inf];

void bfs(int st)

f[st][0]+=w[st];

for(int i=head[st];i!=-1;i=edge[i].next) }

int main()

} for(int i=1;i<=n;i++) }

}

zzulioj 1144進製轉換

十進位制轉換為多種進製 1144 多種進製 時間限制 1 sec 記憶體限制 128 mb 提交 2845 解決 1725 提交 狀態 討論版 命題人 admin 題目描述 輸入乙個十進位制整數n,轉換成2 3 7 8進製輸出 要求程式定義乙個dtok 函式,功能是將十進位制數轉化為k進製整數,其餘...

zzulioj 1144 多種進製

題目描述 輸入乙個十進位制整數n,轉換成2 3 7 8進製輸出 要求程式定義乙個dtok 函式,功能是將十進位制數轉化為k進製整數,其餘功能在main 函式中實現。void dtok int n,int k,char str 輸入 輸入乙個int範圍內的正整數n 輸出 輸出為4行,分別是n對應的2 ...

poj1144 求割點數)

別人寫的對割點的詳細介紹 無向圖求點割集演算法 出處 黑書上給出了關於求點割集的演算法,但是比較模糊,我查閱了網路上的相關資料,理解了求點割集的過程,寫出如下求點割集的 並寫了一些簡單的證明.割點集的定義 如果在連通圖g中去掉某一點後圖不連通,那麼這個點即為g的割點,所有割點的集合即為點割集。求點割...