1596 Usaco2008 Jan 電話網路

2022-05-12 10:01:08 字數 2233 閱讀 3842

farmer john決定為他的所有奶牛都配備手機,以此鼓勵她們互相交流。不過,為此fj必須在奶牛們居住的n(1 <= n <= 10,000)塊草地中選一些建上無線電通訊塔,來保證任意兩塊草地間都存在手機訊號。所有的n塊草地按1..n 順次編號。 所有草地中只有n-1對是相鄰的,不過對任意兩塊草地a和b(1 <= a <= n; 1 <= b <= n; a != b),都可以找到乙個以a開頭以b結尾的草地序列,並且序列中相鄰的編號所代表的草地相鄰。無線電通訊塔只能建在草地上,一座塔的服務範圍為它所在的那塊草地,以及與那塊草地相鄰的所有草地。 請你幫fj計算一下,為了建立能覆蓋到所有草地的通訊系統,他最少要建多少座無線電通訊塔。

* 第1行: 1個整數,n

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

* 第1行: 輸出1個整數,即fj最少建立無線電通訊塔的數目

51 3

5 24 3

3 5輸入說明:

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

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

(或是其他類似的形狀)

4 2

| |

1--3--5

2輸出說明:

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

gold

黃學長的題解:

f[i][0]:以i為根的子樹中所有點均被覆蓋且草地i上無訊號塔所需的最小塔數(i被其兒子覆蓋)

f[i][1]:以i為根的子樹中所有點均被覆蓋且草地i上有訊號塔所需的最小塔數

f[i][2]:以i為根的子樹中除i點以外其餘點均被覆蓋所需的最小塔數

1

很容易想到是樹形dp,然後對於乙個節點i,如果在它的上面建立無線電發射塔的話,那麼只需要考慮在他的兒子裡面取min即可;

2然後自然而然的想到要轉移i節點沒有建立發射塔的情況,那麼一種情況是它被它的兒子覆蓋,另一種是被他的父親覆蓋,

3對於被他的父親覆蓋這種情況,只需要對它的兒子沒有建立發射塔並被覆蓋的情況求和即可,

4 對於被他的兒子覆蓋這種情況,可以列舉他被某個兒子覆蓋,其他的兒子隨便取,這樣就好了。

個人理解

1 #include2 #include3 #include4 #include5 #include6 #include7 #include

8 #include9 #include10 #include11 #include

12#define inf 100000000

13#define maxn 10005

14#define maxm 10000+5

15#define eps 1e-10

16#define ll long long

17#define for0(i,n) for(int i=0;i<=(n);i++)

18#define for1(i,n) for(int i=1;i<=(n);i++)

19#define for2(i,x,y) for(int i=(x);i<=(y);i++)

20#define for3(i,x,y) for(int i=(x);i>=(y);i--)

21#define for4(i,x) for(int i=head[x],y=e[i].go;i;i=e[i].next,y=e[i].go)

22using

namespace

std;

23int tot,head[maxn],f[3

][maxn];

24struct

edgee[maxn*2

];27

intread()

30while(ch>='

0'&&ch<='9')

31return x*f;32}

33void insert(int u,int

v)36

void dp(int x,int

fa)47

for(int i=head[x];i;i=e[i].next)

52}

53int

main()

61 dp(1,0

);62 printf("

%d",min(f[0][1],f[1][1

]));

63return0;

64 }

view code

by:也可以用貪心來做。。。。。。

1596 Usaco2008 Jan 電話網路

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

Usaco2008 Mar 土地購買

此題依舊是斜率優化。感覺自己做斜率優化做瘋了 滑稽 還是與先前一樣弄出dp式 這裡要著重說明一下 這裡的x,y都已經是排過序並整理了的!我們先按照x為第一關鍵字,y為第二關鍵字來從小到大 both 排序。隨後,我們發現它的y不滿足單調性。所以我們應當將其轉換一下。這樣子,我們就可以斜率優化了。設k上...

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