P2279 HNOI2003 消防局的設立

2021-08-21 20:59:23 字數 1002 閱讀 2048

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]輸出格式:

輸出檔名為output.txt

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

貪心**qaq

f[i]是i的父親,dep[i]是i的深度

由於題中說輸入資料中a[i]v[i]表示第i個結點是否被覆蓋

類似於乙個寬搜吧

當所有基地並沒有都被覆蓋時:

1、取出當前未被覆蓋的結點中深度最大的

2、找到該結點父結點的父結點,記為pos,並覆蓋。計數器+1

3、列舉所有結點中與pos結點距離不超過2的,並覆蓋 然後不斷重複以上步驟

#includeusing namespace std;

int n,cut,ans,x;

bool v[1003];

struct type

nod[1003];

int main()

}cout

}

P2279 HNOI2003 消防局的設立

p2279 hnoi2003 消防局的設立 寫得不錯 寫得也可以 樹形動規的寫法,沒人指導,確實看不懂,無奈,找能看懂得來研究。此文做法,摘抄如下 乙個簡單的貪心,我們只要考慮2個消防局設立的距離為5時是最好的,因為利用最充分.就dfs一遍,再對根處理一下就可以了.這道題應該是sgu某道題的簡化版....

P2279 HNOI2003 消防局的設立

本來看著像是樹狀dp,但是狀態好麻煩。所以可以用貪心。這個思想一開始想到了,奈何 能力不夠。所以借鑑了一下洛谷上的思路。1.用d i 儲存深度,b i 來代表節點值。然後這個cmp函式來排列b i 即實現了b i 代表第i深的節點值 2.用o i 來儲存到這個節點最近的消防局距離。f i 代表父節點...

P2279 HNOI2003 消防局的設立

之前拿dp寫過一次。炸了。但就一直爛在 了。昨天同學胡策。出到了一部分。說使用貪心做。時間複雜度是 o nk 的。其中k是半徑。然後就學習了一波。當然這道題是只考慮點支配 差不多 感覺這個貪心很妙 大體就是按照深度,處理出多少級祖先來,然後貪心。include include include inc...