HNOI2003 樹上貪心 消防局的設立

2022-05-24 13:57:10 字數 1223 閱讀 5661

這道題可以打樹上 \(dp\),但顯然貪心方便

我們貪心地考慮這個問題,乙個葉子結點的消防站必然是建在它的爺爺上,才能盡可能多的增加覆蓋的點,所以先跑一遍 \(dfs\) 處理深度,再按深度降序掃瞄節點即可。

時間複雜度:\(o(n^2)\),可以通過本題。

**:

// no greater than 2 -> father and grandfather

# include # include # include # define sp std::pair

# define mp std::make_pair

# define maxn 1005

struct edgee[maxn<<1];

struct nodend[maxn];

int hd[maxn], cnte;

bool vis[maxn];

std::priority_queue, std::vector>, std::less> >q;

// pairvoid adde(int u, int v);

void predfs(int now, int fa);

void ansdfs(int now, int dis);

int main()

predfs(1, 0);

int now = q.top().second;

while(q.size())

if(q.empty())

if(nd[nd[now].fa].fa)

else

ans++;

} printf("%d", ans);

return 0;

}void ansdfs(int now, int dis)

vis[now] = 1;

for(int i = hd[now]; i; i = e[i].next)

}void predfs(int now, int fa);

q.push(mp(nd[now].dep, now));

for(int i = hd[now]; i; i = e[i].next)

predfs(e[i].v, now); }}

void adde(int u, int v);

hd[u] = cnte;

}

HNOI2003 消防局的設立(貪心)

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

HNOI2003 消防局的設立 貪心

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

HNOI 2003 消防局的建立

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