ZJOI2015 諸神眷顧的幻想鄉

2021-07-31 04:41:23 字數 2076 閱讀 9961

p3256

【zjoi2015 day1】諸神眷顧的幻想鄉

時間限制 : 

20000 ms   空間限制 : 

524288 kb

問題描述

幽香是全幻想鄉里最受人歡迎的萌妹子,這天,是幽香的2600歲生日,無數幽香的粉絲到了幽香家門前的太陽花田上來為幽香慶祝生日。

粉絲們非常熱情,自發組織表演了一系列節目給幽香看。幽香當然也非常高興啦。

這時幽香發現了一件非常有趣的事情,太陽花田有n塊空地。在過去,幽香為了方便,在這n塊空地之間修建了n-1條邊將它們連通起來。也就是說,這n塊空地形成了乙個樹的結構。

有n個粉絲們來到了太陽花田上。為了表達對幽香生日的祝賀,他們選擇了c中顏色的衣服,每種顏色恰好可以用乙個0到c-1之間的整數來表示。並且每個人都站在乙個空地上,每個空地上也只有乙個人。這樣整個太陽花田就花花綠綠了。幽香看到了,感覺也非常開心。

粉絲們策劃的乙個節目是這樣的,選中兩個粉絲a和b(a和b可以相同),然後a所在的空地到b所在的空地的路徑上的粉絲依次跳起來(包括端點),幽香就能看到乙個長度為a到b之間路徑上的所有粉絲的數目(包括a和b)的顏色序列。一開始大家打算讓任意兩個粉絲(注意:a,b和b,a是不同的,他們形成的序列剛好相反,比如紅綠藍和藍綠紅)都來一次,但是有人指出這樣可能會出現一些一模一樣的顏色序列,會導致審美疲勞。

於是他們想要問題,在這個樹上,一共有多少可能的不同的顏色序列(子串)幽香可以看到呢?

太陽花田的結構比較特殊,只與乙個空地相鄰的空地數量不超過20個。

輸入格式

第一行兩個正整數n,c。表示空地數量和顏色數量。

第二行有n個0到c-1之間,由空格隔開的整數,依次表示第i塊空地上的粉絲的衣服顏色。(這裡我們按照節點標號從小到大的順序依次給出每塊空地上粉絲的衣服顏色)。

接下來n-1行,每行兩個正整數u,v,表示有一條連線空地u和空地v的邊。

輸出格式

一行,輸出乙個整數,表示答案。

樣例輸入

7 30 2 1 2 1 0 0 

1 23 4

3 54 6

5 72 5

樣例輸出30

提示對於所有資料,1<=n<=100000, 1<=c<=10。

對於15%的資料,n<=2000。

另有5%的資料,所有空地都至多與兩個空地相鄰。

另有5%的資料,除一塊空地與三個空地相鄰外,其他空地都分別至多與兩個空地相鄰。

另有5%的資料,除某兩塊空地與三個空地相鄰外,其他空地都分別至多與兩個空地相鄰。

題解:發現每乙個子串均是以某乙個葉子結點為根的樹中,根到葉子結點的路徑上的字尾的字首,或者說是這條路徑上的子串

因為保證了葉子結點<=20個,那麼,我們以每個葉子結點為根開始算,子串個數我們可以用字尾自動機來計算。

#include#include#include#include#include#define ll long long

using namespace std;

template inline void _read(t& x)

for(x=0;t>='0'&&t<='9';t=getchar())x=x*10+t-'0';

if(!sign)x=-x;

} int n,m,c,e,tot=1,last=1,root=1;

struct node;

node _auto[2000005];

int par[2000005];

int insert(int t,int auto_fa)

}return np;

}struct line

line(int x,int y)

};line edge[200005];

int last[100005],_next[200005];

void add_edge(int x,int y)

int color[100005],deg[100005];

void dfs(int x,int fa,int auto_fa)

}int main_main()

for(i=1;i

ZJOI2015 諸神眷顧的幻想鄉

一行乙個整數表示答案 7 3 0 2 1 2 1 0 0 1 2 3 4 3 5 4 6 5 7 2 5n 100000,c 10 發現葉子只有10個,那麼可以以每個葉子為根,建trie,然後建廣義字尾自動機 對於每個狀態,代表的字串個數就是max min 1 include include inc...

ZJOI2015 諸神眷顧的幻想鄉

求不同的子串個數 如果規定根的話,那麼彎曲的路徑難以處理。由於只有20個葉子,所以以每個葉子分別為根,建20棵trie樹,再把20棵trie樹合成一棵。這樣,trie上乙個到某個祖先的路徑構成了所有的子串。可能重複 所以trie上建sam。sam的路徑條數 或者每個點的len i len fa i ...

ZJOI2015 諸神眷顧的幻想鄉

給定一棵葉子節點不超過 20 個的無根樹,每個節點上都有乙個 0 sim 9 的數字,求樹上本質不同路徑條數。兩條路徑相同是指其路徑上所以節點上的數字順次鏈結組成的字串相同。1 le n le 10 5 如果此題是從根出發的路徑,那相當於就是給定了一棵 text 樹,非常好做。考慮轉化成從根開始的路...