開始看錯題看成了每個點度數不超過20 後來翻了翻題解原來看錯題的不止我乙個
既然葉子數量不超過20,考慮樹上的任何一條路徑,以任何點為根時,如果它不是一條從上到下的路徑,那麼以它的任意一端的子樹內的某乙個葉子為根必然可以變成從上到下的。否則,以它處於下端的點的子樹內的葉子為根也可以做到。
所以如果以每乙個葉子為根的串建成個 trie 並且把所有單詞丟進廣義sam就做完了。
說一下廣義sam的構建:
空間開小wa了發海星
#include#include#include#include#include "queue"
using namespace std;
typedef long long ll;
#define maxn 2000006
int n , lst , m;
char ch[maxn];
struct sam
void ins( int x )
}lst = cur;
}int ch[maxn][10] , pos[maxn];
void build( ) }}
long long work( )
return res;
}} s ;
namespace wtf
int w[maxn] , cn;
void build( int u , int ps , int fa )
}int c;
void main()
}int main()
BZOJ3926 諸神眷顧的幻想鄉
樹上sam!顯然如果樹上一條一條字串放的話那麼是n 2的w 但是 題目的性質非常吼啊!20個葉子節點 我們就可以 把所有葉子結點拎出來當根 全部扔到乙個sam裡 就吼啦 最後的答案是 因為自動機上乙個節點的貢獻就是這麼多啦 自動機啥的 真的好寫呢 flag 機房好冷啊 附 include inclu...
bzoj3926 廣義SAM 諸神眷顧的幻想鄉
description 幽香是全幻想鄉里最受人歡迎的萌妹子,這天,是幽香的2600歲生日,無數幽香的粉絲到了幽香家門前的太陽花田上來為幽香慶祝生日。粉絲們非常熱情,自發組織表演了一系列節目給幽香看。幽香當然也非常高興啦。這時幽香發現了一件非常有趣的事情,太陽花田有n塊空地。在過去,幽香為了方便,在這...
BZOJ3926 諸神眷顧的幻想鄉(字尾自動機)
bzoj 廣義字尾自動機啦 求多個串的不同子串個數?當然是字尾自動機,最後只要把lo nges t pa rent lon gest 求個和就好啦 那麼這題怎麼建字尾自動機 能夠把所有子串都丟進去呢?當然不用從每乙個節點開始 把樹建出來之後,從每個葉子節點開始遍歷一遍,同時把遍歷到的點查進sa m ...