簡要題意:
一棵樹,有 k
kk 個關鍵點,請你把樹劃分為若干聯通塊,使得每個聯通塊包含至少乙個關鍵點,最小化最大的聯通塊的大小。
首先容易注意到可以二分答案。
然後考慮怎麼判斷,進行dfs,每個點盡量貪心往下劃分。
h vu
hv_u
hvu
表示 u
uu 為根的子樹,u
uu 這個聯通塊還能多容吶的點數。
n tu
nt_u
ntu
表示 u
uu 為根的子樹,無法向下分到任何乙個聯通塊的點數。
這樣就非常好計算了,具體轉移見**。
**:
#include
#define ll long long
#define re register
#define cs const
namespace io
template
<
typename t>t get_integer()
inline
intgi()
}using
namespace io;
using std::cerr;
using std::cout;
cs int n=
2e5+7;
int el[n]
,nx[n+n]
,to[n+n]
,ec;
void
adde
(int u,
int v)
bool key[n]
;int lim;
int hv[n]
,nt[n]
;bool
dfs(
int u,
int p)
else
hv[p]
=std::
max(hv[p]
,hv[u]
-nt[u]);
return
true;}
void
main()
cout<"\n";}
inline
void
file()
signed
main()
NOI模擬 深邃(二分 貪心)
題意 給一棵樹,有 n n 個點,其中 k role presentation k k個關鍵點,求一種分割方案 斷掉一些邊 使得每個聯通塊至少有 1 1 個關鍵點,且使得最大塊最小。題解 二分塊的限制 然後記fi gi role presentation fi,gifi gi表示與 i i 聯通的最...
CodeVS1725 探險 二分答案 貪心
題目描述 有編號為1至n的n個同學一起去探險,現在把他們分成k個小組,每個小組完成一項探險任務。分組時,如果第i人與第j人分在同一組 i j 則他們之間的所有人 第i 1,i 2,j 1個 也必須在同乙個小組中。乙個小組內所有人的體力和越小,途中可能越危險。為了確保每個同學的安全,要求分組時,使得所...
二分查詢與二分答案
主要用於在乙個單調的函式中查詢某值 連續函式的情況 若當前查詢的區間是 l,r 查詢的值是 y 函式單增 設 mid l r 2 若 f mid y 則 l mid,否則 r mid 直至 r l eps 當前查詢的區間是 l,r 查詢的值是 y 函式單增 設 mid l r 2 若 f mid y...