題目傳送門
題目大意:給出一棵樹,每個點有顏色,任意選出兩點從 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 ...