请问下面两种代码的区别在哪里,将第一份代码换成第二份就AC了,本蒟蒻实在看不出哪里有什么问题。
TREE work2(int x,int y)
{
int fx=top[x];
int fy=top[y];
TREE res1={},res2={};
while(fx!=fy)
{
if(dep[fx]<dep[fy])
{
res2=hb(query(1,1,n,id[fy],id[y]),res2);
y=f[fy];
fy=top[y];
}
else
{
res1=hb(query(1,1,n,id[fx],id[x]),res1);
x=f[fx];
fx=top[x];
}
}
if(dep[x]>dep[y]) res1=hb(query(1,1,n,id[y],id[x]),res1);
else res2=hb(query(1,1,n,id[x],id[y]),res2);
swap(res1.lm,res1.rm);
return hb(res1,res2);
}
TREE work2(int x,int y)
{
int fx=top[x];
int fy=top[y];
TREE res1={},res2={};
while(fx!=fy)
{
if(dep[fx]<dep[fy])
{
res2=hb(res2,query(1,1,n,id[fy],id[y]));
y=f[fy];
fy=top[y];
}
else
{
res1=hb(res1,query(1,1,n,id[fx],id[x]));
x=f[fx];
fx=top[x];
}
}
if(dep[x]>dep[y]) res1=hb(res1,query(1,1,n,id[y],id[x]));
else res2=hb(res2,query(1,1,n,id[x],id[y]));
swap(res1.lm,res1.rm);
return hb(res1,res2);
}