NOI模擬 深邃(二分 貪心)

2021-08-17 10:00:42 字數 1067 閱讀 6579

題意:

給一棵樹,有

n n

個點,其中

k' role="presentation">k

k個關鍵點, 求一種分割方案(斷掉一些邊)使得每個聯通塊至少有

1 1

個關鍵點,且使得最大塊最小。

題解:二分塊的限制 , 然後記fi

,gi' role="presentation">fi,

gifi

,gi表示與

i i

聯通的最小塊大小, 以及這個最小塊是否含黑點,貪心做樹形dp即可。

#include 

using

namespace

std;

typedef

long

long ll;

const

int rlen=1

<<18|1;

inline

char nc()

inline

int rd()

while(isdigit(ch))

return i*f;

}const

int n=2e5+50;

int n,k,col[n],col2[n],lim,f[n];

vector

edge[n];

inline

bool dfs(int x,int fa) else

}if(col[x]) else

return

false;

} else else

if(sum0+1

<=lim) else

return

false;

}return

true;

}inline

bool check(int v)

int main()

for(int i=1;i<=k;i++) col[rd()]=1;

int l=1,r=1e9,ans;

while(l<=r)

cout

<}

校內模擬 深邃(貪心)(二分答案)

簡要題意 一棵樹,有 k kk 個關鍵點,請你把樹劃分為若干聯通塊,使得每個聯通塊包含至少乙個關鍵點,最小化最大的聯通塊的大小。首先容易注意到可以二分答案。然後考慮怎麼判斷,進行dfs,每個點盡量貪心往下劃分。h vu hv u hvu 表示 u uu 為根的子樹,u uu 這個聯通塊還能多容吶的點...

二分貪心 21

題目大概 有n堆積木,積木高度不同,每個小方塊高度相同。問,最少移動多少小方塊,使得這些積木堆高度相等。思路 先求這些積木的平均數,在把所有的高度與平均數的差值加起來,最後除2,就是最少移動的方塊數。感想 這個題有一點很坑人,最後輸出的時候有乙個小點,不注意看看不到。include include ...

二分貪心 E

題目 輸入n和c,n代表有n間屋子c代表有c頭牛,然後輸入n個數代表這n間房子的座標,牛不喜歡這個布局,一進去就會很暴躁,所以要把牛分的盡可能的遠求最近兩頭牛的最大距離。解題思路 建立乙個陣列存這些房子的座標,然後用sort將這些座標排序,然後令l 0,r a n mid l r 2,先用mid當作...