BZOJ 4401 塊的計數 樹分塊

2021-07-09 22:38:21 字數 713 閱讀 2129

首先,塊的大小確定的話,可以發現方案最多只有1種

by神犇wangyurzee7

有了這個結論後就非常好做了,記錄一下當塊的大小為x時,可以做塊的根的數量,即滿足x|size[i]的i的數量,可以考慮nlogn的線性篩的做法

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define r 998244353

using

namespace

std;

int sc()

int size[1000001],sum[1000001];

int head[1000001],nxt[2000001],lst[2000001];

int tot,n,ans;

void insert(int x,int y)

void dfs(int x,int f)

sum[size[x]]++;

}int main()

dfs(1,0);

for(int i=1;i<=n;i++)

cout

0;}

bzoj 4401 塊的個數(樹分塊)

一種特殊的分塊型別 樹分塊,與數列分塊有很大差別,基本都是將樹分成好幾個塊。對於此題,有兩個結論 1 一棵樹劃分成 k kk 份的方案是唯一的 但可以不存在 2 一棵樹可以劃分成 k kk 份,當且僅當有 k kk 個子節點的子樹大小是 n k frac kn 的倍數 所以只要 dfs dfsdf ...

BZOJ4401 塊的計數

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

bzoj 4401 塊的計數

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