根據塊狀樹的那堆理論可以發現,對於某種塊大小,可行的分法只有一種
如果乙個點能被當成塊頂,僅當其子樹大小是塊大小的倍數
於是列舉塊的大小\(i\),當可行的塊頂個數大於等於\(n / i\)時,就可以構造出可行的分法了
時間複雜度 \(o(\sum_d)\)
#include #define n 2010000using
namespace
std;
intn;
intlt[n], bi[n], nt[n], tl;
intsi[n], ai[n];
void dfs(int t, int
f)int
ans;
intmain()
dfs(
1, 0
);
for (int i = 1; i <= n; ++i)
if (n % i == 0
)
printf("%d
", ans);
}
BZOJ4401 塊的計數
description 小y最近從同學那裡聽說了乙個十分牛b的高階資料結構 塊狀樹。聽說這種資料結構能在sqrt n 的時間內維護樹上的各種資訊,十分的高效。當然,無聊的小y對這種事情毫無興趣,只是對把樹分塊這個操作感到十分好奇。他想,假如能把一棵樹分成幾塊,使得每個塊中的點數都相同該有多優美啊!小...
BZOJ4401 塊的計數
小y最近從同學那裡聽說了乙個十分牛b的高階資料結構 塊狀樹。聽說這種資料結構能在sqrt n 的時間內維護樹上的各種資訊,十分的高效。當然,無聊的小y對這種事情毫無興趣,只是對把樹分塊這個操作感到十分好奇。他想,假如能把一棵樹分成幾塊,使得每個塊中的點數都相同該有多優美啊!小y很想知道,能有幾種分割...
bzoj4401 塊的計數
首先,塊的大小確定的話,可以發現方案最多只有1種 然後就可以o nsqrt n 搞,不過會tle 接著我們又發現,乙個節點可以作乙個塊的根,當且僅當該節點的size能被塊的大小整除 然後就可以o nlogn 搞了 include include include include include inc...