hdu6228 搜尋 類似樹的重心 Tree

2021-08-10 08:43:41 字數 1211 閱讀 8537

這道題其實不是樹的重心,只是乙個搜尋qwq

給定乙個無根樹,問你把樹的任意點染成某個顏色,總共有k個顏色,然後沒個顏色相互連線,把那些連線用的邊搞成乙個集合,總共k個集合,每個集合要求裡面的邊盡可能的小,問你這些集合的最大交集 有多少

思路:以前做過樹的重心,樹的重心滿足一點,就是這個重心去掉之後,樹的最大子樹最小,即樹盡可能的平衡,每個點如果穿過這個點連線其他子樹中的點,那麼路徑和最大,同時,每個點到達該重心的距離和最小。

但是這道題要求的是存在乙個點,這個點 的某個子樹 加上這個點 構成的子樹 和除了這個樹 其他的點構成的樹 的點 的最小值如果大於等於k,那麼就可以把每個點都塗上,使這個邊進入交集。

這樣可以把所有的邊都算一遍。

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

/*樹的重心,就是刨掉乙個點之後,最大子樹最小。

苟神說,樹形dp可以很方便的求數的重心。

*/const

int maxn=4e5+20;

struct nodenode[maxn];

int len;

int head[maxn];

void add(int a,int b)

int m;

bool vis[maxn];

int c_tre[maxn];

int c_num2[maxn];

int sum;

void init()

int kk;

int dfs(int x)

}c_tre[x]=max(c_tre[x],m-all-1);

//c_num2[x]=m-c_tre[x]-1;

return all;

}int main()

sum=0;

dfs(1);

printf("%d\n",sum);

}return

0;}

HDU 6228 tree 簡單思維樹dp

前兩天瀋陽重現,經過隊友提點,得到3題的成績,但是看到這題下意識覺得題目錯了,最後發現實際上是題目讀錯了。gg 感覺自己前所未有的愚蠢了。不過題目讀對了也是一道思維題,但是很好理解。對於乙個無相無環圖,要求找出若干邊,滿足 這些邊被至少k個不同的點集在互相聯通的時候訪問到 或者說 這些邊都包含在k個...

hdu3791二叉搜尋樹

hdu3791二叉搜尋樹 又是二叉搜尋樹的前序遍歷。1.建樹會順序影響整棵樹的形狀 2.記得釋放資源 3.可以用雙重指標和引用優化程式。某些printf 是之前設定的斷點,可以無視之 includeusing namespace std struct bst root bst insert bst ...

hdu 3791 二叉搜尋樹

problem description 判斷兩序列是否為同一二叉搜尋樹序列 input 開始乙個數n,1 n 20 表示有n個需要判斷,n 0 的時候輸入結束。接下去一行是乙個序列,序列長度小於10,包含 0 9 的數字,沒有重複數字,根據這個序列可以構造出一顆二叉搜尋樹。接下去的n行有n個序列,每...