ZJOI 2015 諸神眷顧的幻想鄉 題解

2021-10-05 19:12:44 字數 967 閱讀 6007

題目傳送門

題目大意:給出一棵樹,每個點有顏色,任意選出兩點從 a

aa 走到 b

bb 可以得到乙個顏色序列,問有多少種不同的顏色序列。

由於葉子節點很少,所以從每個葉子節點出發走到其他的葉子節點,把該路徑形成的顏色序列插入到廣義sam中,然後統計有多少個不同的子串即可。

**如下:

#include

#include

using

namespace std;

#define maxn 100010

int n,m,a[maxn]

;struct edge

;edge e[maxn<<1]

;int first[maxn]

,len=0;

void

buildroad

(int x,

int y)

;first[x]

=len;

}int fa[maxn]

,du[maxn]

;struct statest[maxn*40]

;int id=

0,last,now,p,q;

void

extend

(int x)

} last=now;

}void

dfs(

int x,

bool s)

else

for(

int i=first[x]

;i;i=e[i]

.next)

if(e[i]

.y!=fa[x]

)fa[e[i]

.y]=x,

dfs(e[i]

.y,false);

}long

long ans=0;

intmain()

ZJOI2015 諸神眷顧的幻想鄉

p3256 zjoi2015 day1 諸神眷顧的幻想鄉 時間限制 20000 ms 空間限制 524288 kb 問題描述 幽香是全幻想鄉里最受人歡迎的萌妹子,這天,是幽香的2600歲生日,無數幽香的粉絲到了幽香家門前的太陽花田上來為幽香慶祝生日。粉絲們非常熱情,自發組織表演了一系列節目給幽香看。...

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 ...