Luogu P2016戰略遊戲(樹形DP)

2022-05-01 01:45:09 字數 1006 閱讀 7806

題目鏈結

設f[i][j]表示以節點i為根的子樹在狀態j的情況下的最優解。

j有兩種情況。

j=1:i這個根節點有士兵在站崗。

j=0:i這個根節點沒有士兵在站崗。

轉移方程很好想。

f[x][1]+=min(f[to][0],f[to][1

]);f[x][

0]+=f[to][1];

這樣子。

意思就是:如果根節點已經有人站崗了,那麼它的直接子節點可站可不站。就從子節點的兩種狀態中選乙個小的。

如果根節點沒有人站崗,那它的所有直接子節點都必須站崗,否則會有道路有人看不到。

**奉上。

#include#include

#include

#include

using

namespace

std;

inline

long

long

read()

while

(isdigit(ch))

return num*f;

}struct

edgeedge[

1000010

];int head[10000],num=0

;inline

void add(int

from,int

to);

head[

from]=num;

}int f[1700][3

];int size[2000

];void find(int x,int

fa) }

}void dfs(int x,int

fa) }

}int ans=0x7fffffff

;int

main()

}for(int i=0;ii)

printf("%d

",ans);

return0;

}

luogu P2016 戰略遊戲 樹型DP

題目描述 bob喜歡玩電腦遊戲,特別是戰略遊戲。但是他經常無法找到快速玩過遊戲的辦法。現在他有個問題。他要建立乙個古城堡,城堡中的路形成一棵樹。他要在這棵樹的結點上放置最少數目的士兵,使得這些士兵能瞭望到所有的路。注意,某個士兵在乙個結點上時,與該結點相連的所有邊將都可以被瞭望到。請你編一程式,給定...

P2016 戰略遊戲

樹形dp f u 0 表示 uf u 0 表示u f u 0 表示u 號節點不放士兵,以x為根的子樹需要的最少士兵數。f u 1 表示 uf u 1 表示u f u 1 表示u 號節點放士兵,以x為根的子樹需要的最少士兵數。由於我們定義的是將其完全覆蓋,則我們不需要考慮父親節點,為什麼?當我們已經回...

P2016 戰略遊戲

題面 題目背景 bob 喜歡玩電腦遊戲,特別是戰略遊戲。但是他經常無法找到快速玩過遊戲的辦法。現在他有個問題。題目描述 他要建立乙個古城堡,城堡中的路形成一棵無根樹。他要在這棵樹的結點上放置最少數目的士兵,使得這些士兵能瞭望到所有的路。注意,某個士兵在乙個結點上時,與該結點相連的所有邊將都可以被瞭望...