題目傳送門
【題目大意】
這個題面有點中二啊hhhh
總結一下就是給出了一棵$n$個節點的樹,然後在乙個節點駐紮小隊就可以控制樹上所有距離它不超過$k$的節點,求最少需要駐紮多少個小隊就可以控制整棵樹。
【思路分析】
首先有乙個非常顯然的結論,如果把小隊駐紮在葉子節點顯然是比駐紮在非葉子節點要不優的,所以我們可以考慮將所有點按照深度從大到小排序。
每次取出乙個當前深度最大的點,如果這個點已經被覆蓋過了,那就跳過,否則找到這個點的第$k$級祖先,在此駐紮小隊,$ans++$,並覆蓋掉所有距此的距離不大於$k$的點。
最後輸出$ans$即為答案。
【**實現】
1 #include2 #include3 #include4 #include5 #include6 #include7**戳這裡#define g() getchar()
8#define rg register
9#define go(i,a,b) for(rg int i=a;i<=b;i++)
10#define back(i,a,b) for(rg int i=a;i>=b;i--)
11#define db double
12#define ll long long
13#define il inline
14#define pf printf
15#define to(i) e[i].to
16#define e(i,x) for(rg int i=head[x];i;i=e[i].next)
17using
namespace
std;
18int
fr()
25while(ch>='
0'&&ch<='
9') w=(w<<1)+(w<<3)+ch-'
0',ch=g();
26return w*q;27}
28const
int n=1e5+2;29
int n,k,ed=0
,head[n],f[n],dep[n],ans;
30bool
vis[n];
31struct
edgee[n<<1
];34
struct
treet;
37 priority_queueq;
38 il bool
operator
< (tree x,tree y)
44 il void tree(rg int x,rg int
fa)50
return;51
}52 il int find(rg int
x)58
return
x;59
}60 il void work(rg int fa,rg int x,rg int
kk)66
intmain()
74 f[1]=1;dep[1]=1;tree(1,1
);75 go(i,1,n) t=(tree),q.push(t);
76while(!q.empty())
83 pf("
%d\n
",ans);
84return0;
85 }
題解 Luogu P3942 將軍令 貪心
f x 0 表示最近控制驛站的距離 f x 1 表示最遠不能控制的驛站距離 當f x 0 f x 1 k是說明能被控制,但沒有貢獻 當f x 1 k時,x必須被控制,這時已經到達能控制點的最遠距離,如果再向上,x就無法被控制 正確性 如果x可以向上移動,並且仍然能控制x移動前能控制的點,就把x向上移...
題解 將軍令 Luogu P3942 未完成
至少 我們 擁有 傳說 誰說 敗者 無法 不朽 拳頭 只能 讓人 低頭 念頭 卻能 讓人 抬頭 抬頭 去看 去愛 去追 你心中的夢 又想起了四月。如果不是省選,大家大概不會這麼輕易地分道揚鑣吧?只見乙個又乙個昔日的隊友離開了機房。憑君莫話封侯事,一將功成萬骨枯。夢裡,小 f 成了乙個給將軍送密信的信...
題解 將軍令
這道題我看到有人打了樹形 dp 我當時想,每種情況都要討論,20 的dp方程,那位神仙是給某主播打賞了10萬後氣急敗壞了嗎?有的時候,可以貪心的別莽著打dp啊 有道簡化版 p2279 hnoi2003 消防局的設立 樹形dp or 貪心 luogu傳送門 p3942 將軍令 又想起了四月。如果不是省...