如果你 TLE on #13
查看原帖
如果你 TLE on #13
76464
SS80194楼主2021/9/17 22:59

请检查你的欧拉序列是否加了当前弧优化。即每次到一个点的时候,不直接从这一个点连的第一条边开始,而是从上一次到这个点使用的边的后继开始。

AC 代码:

void dfs(int p)
{
	
	for(int i=hd[p];i;i=hd[p])
	{
		int v=e[i].right;
		hd[p]=e[i].up;
		if(vis[i]||vis[i^1]) continue;
		vis[i]=vis[i^1]=1;
		dfs(v);
		AT[++cnt]=e[i].rv;AT[++cnt]=e[i].ru;
	}
	
	return ;
}

TLE 代码:

void dfs(int p)
{
	for(int i=g[p];i;i=e[i].up)
	{
		int v=e[i].right;
		if(vis[i]||vis[i^1]) continue;
		vis[i]=vis[i^1]=1;
		dfs(v);
		AT[++cnt]=e[i].rv;AT[++cnt]=e[i].ru;
	}
	
	return ;
}

下面一种写法可以被极限数据卡到 O(n2)O(n^2) 的复杂度。

2021/9/17 22:59
加载中...