2011分割槽聯賽模擬試題 電子眼

2021-10-01 11:09:59 字數 1821 閱讀 5666

中山市石乙個環境優美、氣候宜人的小城市。因為城市的交通並不繁忙,市內的道路網很稀疏。準確地說 ,中山市有n-1條馬路和n個路口,每條馬路連線兩個路口,每兩個路口之間最多只有一條馬路。作為一條交通網路,顯然每兩個路口之間都是可達的。為了更好地管理中山市的交通,市長決定在一些路口加裝電子眼,用來隨時監視路面情況。這些裝在路口的電子眼能夠監視所有連線到這個路口的馬路。現在市長想知道最少需要在多少個路口安裝電子眼才能監視所有的馬路。市長已經把所有的路口都編上了1~n的號碼。

給你中山市的地圖,你能幫忙嗎?

輸入檔案traffic.in的第1行包括乙個數字n(1<=n<=100000),表示中山市的路口數。接下來n-1行,每行兩個數字x_i和y_i,用來描述n-1條路所連線的兩個路口的編號。

輸出最少需要安裝電子眼的數量。

3

1 21 3

sample output

1
30% n<=100

50% n<=1000

100% n<=100000

思路:

這和沒有上司的舞會差不多,我們先可以分析,假如選了i這個點,那麼和它相鄰的點都不用選。但是有時候會這樣:

我們只需要選擇中間兩個點即可,所以我們不排除這種情況

那我們就設兩個狀態,分別為選或不選這個點,那麼動態轉移方程為

f [x

][0]

+=f[

y][1

]f[x][0]+=f[y][1]

f[x][0

]+=f

[y][

1]f [x

][1]

+=mi

n(f[

y][1

],f[

y][0

])f[x][1]+=min(f[y][1], f[y][0])

f[x][1

]+=m

in(f

[y][

1],f

[y][

0])其中xx代表當前的點,yy代表它的相鄰點

#include

#include

#include

#include

#include

#include

using

namespace std;

int n, tot, v[

1001000

], head[

1001000];

int f[

1001000][

2];struct node

b[1000100];

void

vl_ljb

(int x,

int y)

; head[x]

=tot;

}void

vl_dp

(int x)

}int

main()

vl_dp(1

);printf

("%d"

,min

(f[1][

1], f[1]

[0])

);return0;

}

2011分割槽聯賽模擬試題 電子眼 樹形DP

原題鏈結傳送門 d es crip tion description descri ptio n中山市石乙個環境優美 氣候宜人的小城市。因為城市的交通並不繁忙,市內的道路網很稀疏。準確地說,中山市有n 1條馬路和n個路口,每條馬路連線兩個路口,每兩個路口之間最多只有一條馬路。作為一條交通網路,顯然每...

2023年分割槽聯賽普級組之四 裝

description 有乙個箱子容量為v 正整數,0 v 20000 同時有n個物品 0 n 30 每個物品有乙個體積 正整數 要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。input 乙個整數,表示箱子容量。乙個整數,表示有n個物品。接下來n行,分別表示這n 個物品的各自體積 ou...

2023年分割槽聯賽普級組之一 不

description 津津上初中了。媽媽認為津津應該更加用功學習,所以津津除了上學之外,還要參加媽媽為她報名的各科複習班。另外每週媽媽還會送她去學習朗誦 舞蹈和鋼琴。但是津津如果一天上課超過八個小時就會不高興,而且上得越久就會越不高興。假設津津不會因為其它事不高興,並且她的不高興不會持續到第二天。...