bzoj4401 塊的計數 結論題

2022-05-20 09:43:48 字數 752 閱讀 5823

題目描述

給出一棵n個點的樹,求有多少個si使得整棵樹可以分為n/si個連通塊。

輸入第一行乙個正整數n,表示這棵樹的結點總數,接下來n-1行,每行兩個數字x,y表示編號為x的結點與編號為y的結點相連。結點編號的範圍為1-n且編號兩兩不同。

輸出一行乙個整數ans,表示所求的方案數。

樣例輸入

61 2

2 32 4

4 55 6

樣例輸出3題解

結論題結論:k可行當且僅當子樹大小是k的倍數的節點數有n/k個。

這結論好像挺顯然的(只要你能想出來。。。)

然後就做完了。。。先預處理出每個節點的size,對size維護桶,列舉n的約數,再列舉它的倍數求和統計即可。

時間複雜度為 $o(\sum\limits_\frac nk=\sum\limits_k=n\log\log n)$ 

#include #include #define n 1000010

int head[n] , to[n << 1] , next[n << 1] , cnt , si[n] , v[n];

inline void add(int x , int y)

void dfs(int x , int fa)

inline char nc()

inline int read()

int main()

} printf("%d\n" , ans);

return 0;

}

BZOJ4401 塊的計數

description 小y最近從同學那裡聽說了乙個十分牛b的高階資料結構 塊狀樹。聽說這種資料結構能在sqrt n 的時間內維護樹上的各種資訊,十分的高效。當然,無聊的小y對這種事情毫無興趣,只是對把樹分塊這個操作感到十分好奇。他想,假如能把一棵樹分成幾塊,使得每個塊中的點數都相同該有多優美啊!小...

bzoj 4401 塊的計數

根據塊狀樹的那堆理論可以發現,對於某種塊大小,可行的分法只有一種 如果乙個點能被當成塊頂,僅當其子樹大小是塊大小的倍數 於是列舉塊的大小 i 當可行的塊頂個數大於等於 n i 時,就可以構造出可行的分法了 時間複雜度 o sum d include define n 2010000 using na...

BZOJ4401 塊的計數

小y最近從同學那裡聽說了乙個十分牛b的高階資料結構 塊狀樹。聽說這種資料結構能在sqrt n 的時間內維護樹上的各種資訊,十分的高效。當然,無聊的小y對這種事情毫無興趣,只是對把樹分塊這個操作感到十分好奇。他想,假如能把一棵樹分成幾塊,使得每個塊中的點數都相同該有多優美啊!小y很想知道,能有幾種分割...