原題鏈結傳送門
d es
crip
tion
description
descri
ptio
n中山市石乙個環境優美、氣候宜人的小城市。因為城市的交通並不繁忙,市內的道路網很稀疏。準確地說,中山市有n-1條馬路和n個路口,每條馬路連線兩個路口,每兩個路口之間最多只有一條馬路。作為一條交通網路,顯然每兩個路口之間都是可達的。為了更好地管理中山市的交通,市長決定在一些路口加裝電子眼,用來隨時監視路面情況。這些裝在路口的電子眼能夠監視所有連線到這個路口的馬路。現在市長想知道最少需要在多少個路口安裝電子眼才能監視所有的馬路。市長已經把所有的路口都編上了1~n的號碼。
給你中山市的地圖,你能幫忙嗎?
i np
ut
input
inpu
t輸入檔案traffic.in的第1行包括乙個數字n(1<=n<=100000),表示中山市的路口數。接下來n-1行,每行兩個數字x_i和y_i,用來描述n-1條路所連線的兩個路口的編號。
o ut
pu
toutput
output
輸出最少需要安裝電子眼的數量。
s am
plei
nput
sample ~input
sample
inpu
t31 21 3
s am
pleo
utpu
tsample ~output
sample
outp
uth in
thint
hint
30% n<=100
50% n<=1000
100% n<=100000
樹型動規
一看資料範圍十萬
鄰接矩陣顯然原地**。
這裡需要用到鄰接表(鏈式前向星)。
但是我不會啊!!!
那就學唄
利用鏈式儲存結構。
對於每乙個頂點,開一條鏈,
依次儲存以該點為起點的邊。
下面的**用e陣列儲存邊的資訊,
head[i]儲存i這個頂點對應的鏈的起始位置。
同時e中的next域使所有起始點為i的邊連成一條鏈。
void
add(
int x,
int y)
會了鄰接表就好辦啦!!!
如果當前路口裝電子眼,那麼和它相連的路口可裝可不裝,則
f [r
oot]
[1]+
=min
(f[a
[i].
to][
0],f
[a[i
].to
][1]
)f[root][1]+=min(f[a[i].to][0],f[a[i].to][1])
f[root
][1]
+=mi
n(f[
a[i]
.to]
[0],
f[a[
i].t
o][1
])如果當前路口不裝電子眼,那麼和它相連的路口必須裝,則
f [r
oot]
[0]+
=f[a
[i].
to][
1]
f[root][0]+=f[a[i].to][1]
f[root
][0]
+=f[
a[i]
.to][1]
#include
#include
using
namespace std;
const
int n=
100100
;int n,x,y,head[
1001000
],tot,f[
1001000][
2];int bj[
1001000];
struct note
e[n*2]
;void
ljb(
int x,
int y)
voiddp(
int now)
}int
main()
dp(1)
; cout<<
min(f[1]
[0],f[1]
[1])
;return0;
}
2011分割槽聯賽模擬試題 電子眼
中山市石乙個環境優美 氣候宜人的小城市。因為城市的交通並不繁忙,市內的道路網很稀疏。準確地說 中山市有n 1條馬路和n個路口,每條馬路連線兩個路口,每兩個路口之間最多只有一條馬路。作為一條交通網路,顯然每兩個路口之間都是可達的。為了更好地管理中山市的交通,市長決定在一些路口加裝電子眼,用來隨時監視路...
2023年分割槽聯賽普級組之四 裝
description 有乙個箱子容量為v 正整數,0 v 20000 同時有n個物品 0 n 30 每個物品有乙個體積 正整數 要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。input 乙個整數,表示箱子容量。乙個整數,表示有n個物品。接下來n行,分別表示這n 個物品的各自體積 ou...
2023年分割槽聯賽普級組之一 不
description 津津上初中了。媽媽認為津津應該更加用功學習,所以津津除了上學之外,還要參加媽媽為她報名的各科複習班。另外每週媽媽還會送她去學習朗誦 舞蹈和鋼琴。但是津津如果一天上課超過八個小時就會不高興,而且上得越久就會越不高興。假設津津不會因為其它事不高興,並且她的不高興不會持續到第二天。...