BZOJ3926 諸神眷顧的幻想鄉

2022-05-25 11:18:10 字數 927 閱讀 1883

樹上sam!

顯然如果樹上一條一條字串放的話那麼是n^2的w

但是 題目的性質非常吼啊!

20個葉子節點 我們就可以 把所有葉子結點拎出來當根 全部扔到乙個sam裡 就吼啦

最後的答案是

因為自動機上乙個節點的貢獻就是這麼多啦

自動機啥的**真的好寫呢[flag]

(機房好冷啊)

附**。

#include#include#include#include#define inf 20021225

#define ll long long

#define mxn 100010

using namespace std;

struct edgee[mxn<<1];

struct nodet[mxn*63];

int pos[mxn],rt,poi,d[mxn],in[mxn];

int val[mxn],n,cnt;

void init()

void add(int x,int y)

void insert(int id,int lt)

int q=t[p].ch[c];

if(t[q].len==t[p].len+1)

int nq=++poi; t[nq].len=t[p].len+1;

memcpy(t[nq].ch,t[q].ch,sizeof(t[q].ch));

t[nq].fa=t[q].fa; t[q].fa=t[np].fa=nq;

for(;p&&t[p].ch[c]==q;p=t[p].fa) t[p].ch[c]=nq;

}void dfs(int x,int fa)

}ll ans;

void calc()

int main()

BZOJ 3926 諸神眷顧的幻想鄉

開始看錯題看成了每個點度數不超過20 後來翻了翻題解原來看錯題的不止我乙個 既然葉子數量不超過20,考慮樹上的任何一條路徑,以任何點為根時,如果它不是一條從上到下的路徑,那麼以它的任意一端的子樹內的某乙個葉子為根必然可以變成從上到下的。否則,以它處於下端的點的子樹內的葉子為根也可以做到。所以如果以每...

bzoj3926 廣義SAM 諸神眷顧的幻想鄉

description 幽香是全幻想鄉里最受人歡迎的萌妹子,這天,是幽香的2600歲生日,無數幽香的粉絲到了幽香家門前的太陽花田上來為幽香慶祝生日。粉絲們非常熱情,自發組織表演了一系列節目給幽香看。幽香當然也非常高興啦。這時幽香發現了一件非常有趣的事情,太陽花田有n塊空地。在過去,幽香為了方便,在這...

BZOJ3926 諸神眷顧的幻想鄉(字尾自動機)

bzoj 廣義字尾自動機啦 求多個串的不同子串個數?當然是字尾自動機,最後只要把lo nges t pa rent lon gest 求個和就好啦 那麼這題怎麼建字尾自動機 能夠把所有子串都丟進去呢?當然不用從每乙個節點開始 把樹建出來之後,從每個葉子節點開始遍歷一遍,同時把遍歷到的點查進sa m ...