之前拿dp寫過一次。炸了。但就一直爛在**了。
昨天同學胡策。出到了一部分。說使用貪心做。時間複雜度是\(o(nk)\)的。其中k是半徑。
然後就學習了一波。
當然這道題是只考慮點支配(差不多)
感覺這個貪心很妙
大體就是按照深度,處理出多少級祖先來,然後貪心。
#include#include#include#include#includeusing std::sort;
using std::min;
const int maxn=101000;
int f[maxn],d[maxn],dis[maxn];
int tmp[maxn];
bool compare(int a,int b)
int main()
for(int i=1;i<=n;i++) tmp[i]=i;
sort(tmp+1,tmp+n+1,compare);
int ans=0;
for(int i=1;i<=n;i++)
}printf("%d",ans);
}
P2279 HNOI2003 消防局的設立
p2279 hnoi2003 消防局的設立 寫得不錯 寫得也可以 樹形動規的寫法,沒人指導,確實看不懂,無奈,找能看懂得來研究。此文做法,摘抄如下 乙個簡單的貪心,我們只要考慮2個消防局設立的距離為5時是最好的,因為利用最充分.就dfs一遍,再對根處理一下就可以了.這道題應該是sgu某道題的簡化版....
P2279 HNOI2003 消防局的設立
2020年,人類在火星上建立了乙個龐大的基地群,總共有n個基地。起初為了節約材料,人類只修建了n 1條道路來連線這些基地,並且每兩個基地都能夠通過道路到達,所以所有的基地形成了乙個巨大的樹狀結構。如果基地a到基地b至少要經過d條道路的話,我們稱基地a到基地b的距離為d。由於火星上非常乾燥,經常引發火...
P2279 HNOI2003 消防局的設立
本來看著像是樹狀dp,但是狀態好麻煩。所以可以用貪心。這個思想一開始想到了,奈何 能力不夠。所以借鑑了一下洛谷上的思路。1.用d i 儲存深度,b i 來代表節點值。然後這個cmp函式來排列b i 即實現了b i 代表第i深的節點值 2.用o i 來儲存到這個節點最近的消防局距離。f i 代表父節點...