做银河英雄传说遇到的
在getf()中先更新f[x]的值还是先求权值?
WA:
int getf(int x)//先求权后更新
{
if (f[x] == x) return x;
else
{
ju[x] += ju[f[x]]; //ju[]记录与队头的距离
f[x] = getf(f[x]);
return f[x];
}
}
或者
int getf(int x)//先更新后求权
{
if (f[x] == x) return x;
else
{
f[x] = getf(f[x]);
ju[x] += ju[f[x]];
return f[x];
}
}
但是AC就是:
int getf(int x)
{
if (f[x] == x) return x;
else
{
int t = getf(f[x]);
ju[x] += ju[f[x]];
f[x] = t;
return f[x];
}
}
getf()应该没有更新f[x]啊?这个AC和第一个WA有什么区别……
%%%