警钟撅烂
查看原帖
警钟撅烂
551100
Hoks楼主2023/12/3 13:48

如果你调样例发现自己答案差一,可能是这里出了问题。

我之前错误的写法:

void dfs1(int u,int ff)
{
	fa[u]=ff;dep[u]=dep[ff]+1;si[u]=1;
	for(int i=head[u];i;i=e[i].nxt)
	{
		int v=e[i].v;chu[v]=e[i].w;
		if(v==ff) continue;
		dfs1(v,u);si[u]+=si[v];
		if(si[heavy[u]]<si[v]) heavy[u]=v;
	}
}

调了后正确的写法

void dfs1(int u,int ff)
{
	fa[u]=ff;dep[u]=dep[ff]+1;si[u]=1;
	for(int i=head[u];i;i=e[i].nxt)
	{
		int v=e[i].v;
		if(v==ff) continue;
		dfs1(v,u);si[u]+=si[v];chu[v]=e[i].w;
		if(si[heavy[u]]<si[v]) heavy[u]=v;
	}
}

一定要先判是否为父亲节点再处理值的信息!

2023/12/3 13:48
加载中...