這道題可以打樹上 \(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。由於火星上非常乾燥,經常引發火...