51Nod1367 完美森林 貪心

2022-03-31 15:08:31 字數 910 閱讀 4834

有一棵n個點的樹,樹中節點標號依次為0,1,2,...n-1,其中n<=500000。樹中有n-1條邊,這些邊長度不一定相同。現在要把樹中一些邊刪除,設刪除了k條邊(k>=0,即可以不刪除任何邊),由樹的性質可知,該樹將被分割為乙個含有k+1棵樹的森林。稱乙個森林是"完美森林",要求這個森林中的每一棵樹滿足:該樹的直徑長度不超過maxdist這麼長。其中樹的直徑指樹中任意兩點的最大距離。那麼,對於給出的n個點的樹,能劃分出的完美森林最少包含多少棵樹?

$n\leq 500000$

直接貪心從下往上取。對於當前節點,如果選擇一些子樹之後,超出限制了,就斷掉最深的子樹,直到最深深度不超過限制就好了。

#include using namespace std;

int read()

const int n=500005;

struct graph

void add(int a,int b,int c)

}g;int n,m,ans=1;

int dis[n];

vector a[n];

void solve(int x,int pre)

if (!v.empty())

sort(v.begin(),v.end());

while (!v.empty()&&v.back()>m)

v.pop_back(),ans++;

while (((int)v.size())>=2&&v.back()+v[(int)v.size()-2]>m)

v.pop_back(),ans++;

dis[x]=v.back();

v.clear();

}int main()

solve(1,0);

printf("%d",ans);

return 0;

}

51Nod 1182 完美字串 (貪心)

約翰認為字串的完美度等於它裡面所有字母的完美度之和。每個字母的完美度可以由你來分配,不同字母的完美度不同,分別對應乙個1 26之間的整數。約翰不在乎字母大小寫。也就是說字母f和f 的完美度相同。給定乙個字串,輸出它的最大可能的完美度。例如 dad,你可以將26分配給d,25分配給a,這樣整個字串完美...

51nod1803 森林直徑

題目看這裡 為什麼xheditor不能支援字型了,不管了,那就用markdown吧 乙個非常有意思的題目,首先考慮離線做法,把所有的詢問按照l排序,所有的邊倒序插入整個樹中 我們需要維護兩個東西 1.f x i 表示當整顆樹有 x,f x i 這乙個區間內的所有邊時,以x為根的子樹存在乙個深度為i的...

51nod1803 森林直徑

題目看這裡 為什麼xheditor不能支援字型了,不管了,那就用markdown吧 乙個非常有意思的題目,首先考慮離線做法,把所有的詢問按照l排序,所有的邊倒序插入整個樹中 我們需要維護兩個東西 1.f x i 表示當整顆樹有 x,f x i 這乙個區間內的所有邊時,以x為根的子樹存在乙個深度為i的...