消防局的設立

2022-04-07 21:41:28 字數 595 閱讀 4658

p2279 [hnoi2003]消防局的設立

主要思路:貪心,從葉子節點開始(按深度排序即可做到),從它父親的父親,把距離不超過 \(2\) 的節點都打上標記,\(ans++\)。這樣一定最優,因為必須覆蓋那個沒被覆蓋的節點,而從祖父開始可以覆蓋更多的點。注意把根節點的父親設為根節點,否則從根節點開始跳就re了

#includeusing namespace std;

const int n=1005;

int n,ans;

bool vis[n];

vectorg[n];

int p[n];

struct node2d[n];

bool cmp(node2 a,node2 b)

void dfs1(int now,int deep,int fa)

}int main()

dfs1(1,1,1);

sort(d+1,d+n+1,cmp);

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

printf("%d\n",ans);

return 0;

}

消防局的設立

我先想的是貪心,但是沒有任何依據 所以rang了 然後想到了乙個有依據的貪心 我們可以找深度最深的乙個點開始考慮。可以證明,取此節點的爺爺一定是最優的。取自己 可以覆蓋自己,自己兄弟,父親,爺爺。取兄弟 可以覆蓋自己,自己兄弟,父親,爺爺。取父親 可以覆蓋自己,自己兄弟,父親,爺爺,父親的兄弟。取爺...

消防局的設立

2020 年,人類在火星上建立了乙個龐大的基地群,總共有 n 個基地。起初為了節約材料,人類只修建了 n 1 條長為 1 的道路來連線這些基地,並且每兩個基地都能夠通過道路到達,所以所有的基地形成了乙個巨大的樹狀結構。由於火星上非常乾燥,經常引發火災,人類決定在火星上修建若干個消防局。消防局只能修建...

消防局的設立(樹形DP)

2020 年,人類在火星上建立了乙個龐大的基地群,總共有 n 個基地。起初為了節約材料,人類只修建了 n 1 條長為 1 的道路來連線這些基地,並且每兩個基地都能夠通過道路到達,所以所有的基地形成了乙個巨大的樹狀結構。由於火星上非常乾燥,經常引發火災,人類決定在火星上修建若干個消防局。消防局只能修建...