Usaco2008 Jan 電話網路

2021-09-28 07:33:00 字數 1148 閱讀 4784

一道比較神的樹形dp,恕我太菜,一開始想的是三維的。。

實際上並不需要三維,只需要用0,1,2表示即可

d p[

u][0

]dp[u][0]

dp[u][

0]表示當前點不放,他的某乙個兒子覆蓋他的代價

d p[

u][1

]dp[u][1]

dp[u][

1]表示當前點放,他的子樹也被覆蓋的代價

d p[

u][2

]dp[u][2]

dp[u][

2]表示覆蓋當前點的子樹除當前點之外的代價

思考一下為什麼會有dp[

u][2

]dp[u][2]

dp[u][

2],因為乙個點不選,他的兒子也可以不選

只要他的兒子的子樹全部合格就行…

**

#include

#include

#include

#include

#include

#include

using

namespace std;

const

int inf =

2147483647

;const

int maxn =

10007

;int dp[maxn][3

];int n;

struct nodeedge[maxn*2]

;int cnt,head[maxn]

;void

add(

int from,

int to)

void

dfs(

int u,

int fa)

if(flag==

0)dp[u][0

]+=delta;

if(son==

1&&edge[head[u]

].to==fa)

}int

main()

dfs(1,

0); cout<<

min(dp[1]

[1],dp[1]

[0])

;return0;

}

Usaco2008 Jan 電話網路

第2.n行 每行為2個用空格隔開的整數a b,為兩塊相鄰草地的編號 5 1 35 2 4 33 5 輸入說明 farmer john的農場中有5塊草地 草地1和草地3相鄰,草地5和草地2 草地 4和草地3,草地3和草地5也是如此。更形象一些,草地間的位置關係大體如下 或是其他類似的形狀 輸出2 輸出...

1596 Usaco2008 Jan 電話網路

farmer john決定為他的所有奶牛都配備手機,以此鼓勵她們互相交流。不過,為此fj必須在奶牛們居住的n 1 n 10,000 塊草地中選一些建上無線電通訊塔,來保證任意兩塊草地間都存在手機訊號。所有的n塊草地按1.n 順次編號。所有草地中只有n 1對是相鄰的,不過對任意兩塊草地a和b 1 a ...

1596 Usaco2008 Jan 電話網路

farmer john決定為他的所有奶牛都配備手機,以此鼓勵她們互相交流。不過,為此fj必須在奶牛們居住的n 1 n 10,000 塊草地中選一些建上無線電通訊塔,來保證任意兩塊草地間都存在手機訊號。所有的n塊草地按1.n 順次編號。所有草地中只有n 1對是相鄰的,不過對任意兩塊草地a和b 1 a ...