如果你 WA 64 pts
查看原帖
如果你 WA 64 pts
731650
_zuoqingyuan楼主2025/7/3 19:26

在第一遍初始化最近叶子的距离时,可能会写下这样的代码:

void dfs1(int x,int fa){
	if(deg[x]==1)g[x]=0;
	else{
		g[x]=1e9;
		for(auto y:G[x]){
			if(y==fa)continue;
			dfs1(y,x);
			g[x]=min(g[x],g[y]+1);
		}
	}
	val[x]=2-deg[x];
	return;
}

这样写是错误的,可能会有 11 号节点度数为 11 的可能,这样所有的节点都不会初始化。所以要写成这样:

void dfs1(int x,int fa){
	if(deg[x]==1)g[x]=0;
	else g[x]=1e9;
	for(auto y:G[x]){
		if(y==fa)continue;
		dfs1(y,x);
		g[x]=min(g[x],g[y]+1);
	}
	val[x]=2-deg[x];
	return;
}

树状数组空间也要记得开大。所有的 dfs 函数都要判断下一个点是否是曾经的分治点

2025/7/3 19:26
加载中...