Usaco2008 Jan 電話網路

2022-05-11 03:06:00 字數 1048 閱讀 5124

* 第2..n行: 每行為2個用空格隔開的整數a、b,為兩塊相鄰草地的編號

5

1 35 2

4 33 5

輸入說明:

farmer john的農場中有5塊草地:草地1和草地3相鄰,草地5和草地2、草地

4和草地3,草地3和草地5也是如此。更形象一些,草地間的位置關係大體如下:

(或是其他類似的形狀)

輸出

2

輸出說明:

fj可以選擇在草地2和草地3,或是草地3和草地5上建通訊塔

1 #include2

using

namespace

std;

3int n,head[1000001],tot,f[10001][3];4

//f[i][0] i被自己覆蓋5//

f[i][1] i被兒子覆蓋 6//

f[i][2] i被父親覆蓋7//

f[i][0]+=min(f[son][1],f[son][2],f[son][0]) 8//

f[i][1]=f[x][0]+sigma(min (f[son][0],f[son][1]) ) 9//

f[i][2]+=min(f[son][0],f[son][1])

10struct

data e[1000001

];13

void add(int x,int

y) 18

void dp(int x,int

fa)

31 f[x][1]=f[special_son][0

];32

for(int i=head[x];i;i=e[i].nxt)38}

39int

main()

46 f[0][0]=0x3f

;47 dp(1,-1

);48 printf("

%d\n

",f[1][1]1][0]?f[1][1]:f[1][0

]);49

return0;

50 }

Usaco2008 Jan 電話網路

一道比較神的樹形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 ...

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 ...