关于树上后缀数组的height求法
  • 板块学术版
  • 楼主xtx1092515503
  • 当前回复0
  • 已保存回复0
  • 发布时间2020/11/4 20:39
  • 上次更新2023/11/5 09:00:24
查看原帖
关于树上后缀数组的height求法
123369
xtx1092515503楼主2020/11/4 20:39

RT,想知道树上后缀排序时,height数组是否可以像常规后缀排序一样使用LCP Theroem求出,还是说只能写二分+哈希?

如果答案是可以的话,能帮忙看一下这段代码为何会挂吗?其中rt是树根(除了树根外其它节点上都有字符,因此计算height时到rt就应该停止了);s是节点上的字符,anc数组是倍增的祖先数组,ANC函数通过树上倍增找到k级祖先,dep数组是深度数组(同理,不包括树根)。

for(int i=1,k=0;i<=n;i++){
	if(rk[i]==1)continue;
	if(k)k--;
	k=min(k,dep[i]),k=min(k,dep[sa[rk[i]-1]]);
	int u=ANC(i,k),v=ANC(sa[rk[i]-1],k);
	while(u!=rt&&v!=rt&&s[u]==s[v])k++,u=anc[u][0],v=anc[v][0];
	ht[rk[i]]=k;
}
2020/11/4 20:39
加载中...