RT
为什么这样写能AC
il void getdis(int x,int f)
{
st[++top]=(info){dis[x],dep[x]};
for(re int i=h[x];i;i=e[i].nxt)
if(!vis[e[i].v]&&e[i].v^f)
{
dis[e[i].v]=dis[x]+e[i].w;
dep[e[i].v]=dep[x]+1;
getdis(e[i].v,x);
}
return;
}
但是这样写会WA?
il void getdis(int x,int f)
{
if(dep[x]>L||dis[x]>W) return;
st[++top]=(info){dis[x],dep[x]};
for(re int i=h[x];i;i=e[i].nxt)
if(!vis[e[i].v]&&e[i].v^f)
{
dis[e[i].v]=dis[x]+e[i].w;
dep[e[i].v]=dep[x]+1;
getdis(e[i].v,x);
}
return;
}
区别只有if(dep[x]>L||dis[x]>W) return;
但是dep[x]>L或者dis[x]>W应该就不会对答案有贡献了。没有负边权,当前点没贡献子树中的点应该也不会有啊。