做这道题的时候一直 WA on #6和#12
这份是 80pts
for(int i=1;i<=18;i++)
{
for(int j=1,la;j<=n;j++)
{
fa[j][i]=fa[fa[j][i-1]][i-1];
la=fa[j][i-1];
mx[j][i]=max(mx[j][i-1],mx[la][i-1]);
mn[j][i]=max(mn[j][i-1],mn[la][i-1]);
if(mx[j][i-1]<mx[la][i-1])mn[j][i]=max(mn[j][i],mx[j][i-1]);
else if(mx[j][i-1]>mx[la][i-1])mn[j][i]=max(mn[j][i],mx[la][i-1]);
}
}
这份是 AC
for(int i=1;i<=18;i++)
{
for(int j=1,la;j<=n;j++)
{
fa[j][i]=fa[fa[j][i-1]][i-1];
la=fa[j][i-1];
mx[j][i]=max(mx[j][i-1],mx[la][i-1]);
mn[j][i]=max(mn[j][i-1],mn[la][i-1]);
if(mx[j][i-1]==mx[la][i-1])continue;
mn[j][i]=max(mn[j][i],mx[j][i-1]+mx[la][i-1]-mx[j][i]);
}
}
两份代码只有最后有细微的差别,但是意义上是相等的,我想问下各位 dalao 这两者有何区别,导致 WA 了两个点?
如果你也是80 pts 可以试着把代码改成第二个看看能否 AC。