P2016 戰略遊戲 樹形DP

2022-04-30 10:06:13 字數 1184 閱讀 8941

bob喜歡玩電腦遊戲,特別是戰略遊戲。但是他經常無法找到快速玩過遊戲的辦法。現在他有個問題。

他要建立乙個古城堡,城堡中的路形成一棵樹。他要在這棵樹的結點上放置最少數目的士兵,使得這些士兵能瞭望到所有的路。

注意,某個士兵在乙個結點上時,與該結點相連的所有邊將都可以被瞭望到。

請你編一程式,給定一樹,幫bob計算出他需要放置最少的士兵.

輸入格式:

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

第二行至第n+1行,每行描述每個結點資訊,依次為:該結點標號i,k(後面有k條邊與結點i相連)。

接下來k個數,分別是每條邊的另乙個結點標號r1,r2,...,rk。

對於乙個n(0輸出格式:

輸出檔案僅包含乙個數,為所求的最少的士兵數目。

例如,對於如下圖所示的樹:

0
1 2 3

答案為1(只要乙個士兵在結點1上)。

輸入樣例#1: 

4

0 1 1

1 2 2 3

2 03 0

輸出樣例#1: 

1

這道題算是乙個很裸的樹形dp.也很好做.

狀態定義:

f [ x ] [ 1 ] 表示當前這個節點已經被觀察到了.

f [ x ] [ 0 ] 則表示沒有被觀察到了.

於是就是常規的樹形dp.

這道題屬於一類問題: 樹的最大獨立集問題.

但是,通過這道題,有乙個知識點擴充套件:關於圖論其他的一些類似問題

#includeusing

namespace

std;

const

int maxn=2008

;struct

sja[maxn*2

];int

head[maxn],size;

intn,v[maxn];

int f[maxn][2

];void add(int x,int

y)void dfs(int

x) }

}int

main()

}dfs(0);

cout

<0][0],f[0][1])<}

P2016 戰略遊戲 樹形DP

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

洛谷P2016 戰略遊戲 樹形dp

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

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為根的子樹需要的最少士兵數。由於我們定義的是將其完全覆蓋,則我們不需要考慮父親節點,為什麼?當我們已經回...