jzoj1822電子眼 樹型DP

2021-09-26 09:14:57 字數 2721 閱讀 2020

>description

有n條馬路和n個路口,每條馬路連線兩個路口,每兩個路口之間最多只有一條馬路。作為一條交通網路,顯然每兩個路口之間都是可達的。為了更好地管理交通,市長決定在一些路口加裝電子眼,用來隨時監視路面情況。這些裝在路口的電子眼能夠監視所有連線到這個路口的馬路。現在市長想知道最少需要在多少個路口安裝電子眼才能監視所有的馬路。市長已經把所有的路口都編上了1~n的號碼。

給你地圖,你能幫忙嗎?

>input

輸入檔案第1行包括乙個數字n(1<=n<=100000),表示中山市的路口數。接下來n行,每行兩個正整數x,y,表示第x個路口和第y個路口有馬路相連。

>output

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

>sample input

31 2

2 31 3

>sample output

21<=n<=100000

>解題思路

不要相信學校**

由於有n個點與n條邊,所以不管怎樣,這張圖中都有且僅有乙個環,這樣就做不了樹型dp了,但是可以通過dfs找到環中的一條邊(準確地說是找到環中的乙個點c

cc,和任意和它相連的乙個點cccc

cc,並且cccc

cc也在環中),把這條邊刪掉,就成為一棵樹了。

用c

cc和cccc

cc分別作為根做兩次dp:

f [i

]f[i]

f[i]

表示由c

cc或cccc

cc作為根,第i

ii個節點的子樹中的邊都被監視,的最少電子眼數;

f [i

][0]

f[i][0]

f[i][0

]表示以上要求合理的情況下,第i

ii個節點不安裝電子眼

f [i

][1]

f[i][1]

f[i][1

]表示以上要求合理的情況下,第i

ii個節點安裝電子眼

狀態轉移方程:

f [i

][0]

=sum

(f[s

on][

1]

)f[i][0]=sum(f[son][1])

f[i][0

]=su

m(f[

son]

[1])

因為第i個節點不安裝電子眼,所以它的兒子必須安裝才可以使與i相連的邊被監視

f [i

][1]

=sum

(min

(f[s

on][

1],f

[son

][0]

))+1

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

f[i][1

]=su

m(mi

n(f[

son]

[1],

f[so

n][0

]))+

1 因為第i個節點安裝電子眼,所以它的兒子管它安不安裝都可以

最後,因為當初選擇的c和cc之間的邊被刪除了,所以如果要使這一條邊也被監視的話,要麼在c安裝電子眼,要麼在cc安裝電子眼,答案取min值。

>**

#include 

#include

#include

using namespace std;

struct road

a[200005];

int n, x, y, t, c, cc, ans, h[

100005

], f[

100005][

2];bool s[

100005];

void

find

(int last, int dep)

//last表示上乙個點,dep表示當前點

s[dep]=1

;for

(int i = h[dep]

; i; i = a[i]

.next)

find

(dep, a[i]

.to)

;//dfs

s[dep]=0

;}bool check

(int now, int tt)

void

work

(int dep)

s[dep]=0

;}int main()

find(0

,1);

//找到c和cc(找環)

work

(c);

//先由c為根做一次dp

ans = f[c][1

];memset

(f,0

,sizeof

(f))

;work

(cc)

;//再有cc為根做一次dp

printf

("%d"

,min

(ans, f[cc][1

]));

//取min

return0;

}

jzoj1029 電子眼 樹形dp

乙個n個點n條邊的無向圖,在乙個點安電子眼就能監視到連線它的邊,要求所有的邊都被監視求安放電子眼的最少數目。就是沒一條邊的兩頭都至少得有乙個電子眼。我們先假設它是n 1條邊的環 用f i f i 來表示不在這個點放電子眼的最少電子眼數目 用g i g i 來表示在這個點放電子眼的最少電子眼數目 然後...

樹形DP 電子眼

中山市是乙個環境優美 氣候宜人的小城市。因為城市的交通並不繁忙,市內的道路網很稀疏。準確地說,中山市有n條馬路和n個路口,每條馬路連線兩個路口,每兩個路口之間最多只有一條馬路。作為一條交通網路,顯然每兩個路口之間都是可達的。為了更好地管理中山市的交通,市長決定在一些路口加裝電子眼,用來隨時監視路面情...

電子眼 樹狀DP

time limit 10000ms memory limit 65536k total submit 101 accepted 32 case time limit 1000ms description 中山市石乙個環境優美 氣候宜人的小城市。因為城市的交通並不繁忙,市內的道路網很稀疏。準確地說,...