洛谷2279消防局的設立

2021-07-24 08:24:58 字數 1969 閱讀 8216

題目描述

2023年,人類在火星上建立了乙個龐大的基地群,總共有n個基地。起初為了節約材料,人類只修建了n-1條道路來連線這些基地,並且每兩個基地都能夠通過道路到達,所以所有的基地形成了乙個巨大的樹狀結構。如果基地a到基地b至少要經過d條道路的話,我們稱基地a到基地b的距離為d。

由於火星上非常乾燥,經常引發火災,人類決定在火星上修建若干個消防局。消防局只能修建在基地裡,每個消防局有能力撲滅與它距離不超過2的基地的火災。

你的任務是計算至少要修建多少個消防局才能夠確保火星上所有的基地在發生火災時,消防隊有能力及時撲滅火災。

輸入輸出格式

輸入格式:

輸入檔名為input.txt。

輸入檔案的第一行為n (n<=1000),表示火星上基地的數目。接下來的n-1行每行有乙個正整數,其中檔案第i行的正整數為a[i],表示從編號為i的基地到編號為a[i]的基地之間有一條道路,為了更加簡潔的描述樹狀結構的基地群,有a[i]

<

i。輸出格式:

輸出檔名為output.txt

輸出檔案僅有乙個正整數,表示至少要設立多少個消防局才有能力及時撲滅任何基地發生的火災。

輸入輸出樣例

輸入樣例#1:

6 1

2 3

4 5

輸出樣例#1:

2稍複雜的樹形dp

對於節點u

f[u][0]表示u設為消防局

f[u][1]表示在以u為根的子樹中有到u距離<=1的點

f[u][2]表示在以u為根的子樹中有到u距離<=2的點

… f[u][4]表示在以u為根的子樹中有到u距離<=4的點

易得:

f[i][0] = 1+σmin(f[j][0…4])

f[i][1] = min( f[k][0] + σ(j != k)min(f[j][0…3]) )

f[i][2] = min( f[k][1] + σ(j != k)min(f[j][0…2]) )

f[i][3] = σf[j][0…2];f[i][4] = σf[j][0…3];

簡化得

f[i][0] = 1+σf[j][4]

f[i][1] =σ(k)(f[k][0] + σ(j != k)f[j][3]) =f[i][4] + min(σ(k)(f[k][0] - f[k][3]))

f[i][2] =f[i][3] + min(f[k][1] - f[k][2])

f[i][3],f[i][4]略(自己看**)

最後記得要

for(int i = 1; i <= 4; i ++)

f[u][i] = min(f[u][i], f[u][i - 1]);

貼**

#include

#include

#include

using

namespace

std;

const

int maxn = 1000;

int head[maxn + 1];

int cnt;

struct edge

g[maxn << 1];

long

long f[maxn + 1][5];

void addedge(int u, int v)

void dfs(int u, int fa)

if(! flag)

f[u][0] ++;

f[u][1] += f[u][4];

f[u][2] += f[u][3];

for(int i = 1; i <= 4; i ++)

f[u][i] = min(f[u][i], f[u][i - 1]);

}int main()

memset(f, 0, sizeof(f));

dfs(1, - 1);

printf("%d", f[1][2]);

}

洛谷2279 消防局的設立

資料範圍 f i,3 表示 i 的所有兒子節點一定被消防局覆蓋。f i,4 表示 i 的所有孫子節點一定被消防局覆蓋。轉移方程 f i,1 min f k,0 sum min f j,0.3 f i,2 min f k,1 sum min f j,0.2 f i,3 sum min f j,0.2 ...

洛谷P2279消防局的設立

傳送門啦 乙個很摸不清頭腦的樹形dp 狀態 dp i 0 選自己 dp i 1 選了至少乙個兒子 dp i 2 選了至少乙個孫子 覆蓋了自己的 dp i 3 兒子孫子全部覆蓋 dp i 4 孫子全部覆蓋 並沒有覆蓋自己 初始轉移方程 dp i 0 1 sum min dp j 0.4 要使選了根節點...

洛谷 2279 HNOI2003 消防局的設立

題目描述 2020年,人類在火星上建立了乙個龐大的基地群,總共有n個基地。起初為了節約材料,人類只修建了n 1條道路來連線這些基地,並且每兩個基地都能夠通過道路到達,所以所有的基地形成了乙個巨大的樹狀結構。如果基地a到基地b至少要經過d條道路的話,我們稱基地a到基地b的距離為d。由於火星上非常乾燥,...