求关于Splay启发式合并中双旋对时间复杂度的影响,玄关(2枚)
  • 板块学术版
  • 楼主HYLW
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/17 08:21
  • 上次更新2024/7/17 09:35:11
查看原帖
求关于Splay启发式合并中双旋对时间复杂度的影响,玄关(2枚)
663949
HYLW楼主2024/7/17 08:21

以下是做P3224 [HNOI2012] 永无乡过程中得到的两份代码,其中,仅仅dfs(int u,int b)函数的内容不一样,具体地讲,AC代码中最后insert当前节点,而TLE代码中按中序遍历合并。

AC代码,TLE代码。

区别如下:

AC:

void dfs(int u,int b){
	if(tr[u].s[0])	dfs(tr[u].s[0],b);
	if(tr[u].s[1])	dfs(tr[u].s[1],b);
	insert(tr[u].v,tr[u].id,b);
}

TLE:

void dfs(int u,int b){
	if(tr[u].s[0])	dfs(tr[u].s[0],b);
	insert(tr[u].v,tr[u].id,b);
	if(tr[u].s[1])	dfs(tr[u].s[1],b);
}

AC记录,TLE记录。

经过同机房讨论,应该是双旋即splay(int x,int k,int b)函数的影响,“最后插入根使得合并树保留了原来的势能”,但是没有严格证明。

请问有人能对此做出严格的解答吗?

2024/7/17 08:21
加载中...