第一篇题解的find中:
int find(int x) {
int re;
if(x==T||x==F)re=x;
else if(book[n-x]||x==U)re=U;
else if(book[x+n])re=T;
else if(x<0) {
if(x==-fa[-x])re=x;
else {
book[x+n]=1;
re=find(-fa[-x]);//这里注意细节
book[x+n]=0;//清空
}
} else {
if(x==fa[x])re=x;
else {
book[x+n]=1;
re=fa[x]=find(fa[x]);
book[x+n]=0;//清空
}
}
return re;
}
其中的:
if(x<0) {
if(x==-fa[-x])re=x;
else {
book[x+n]=1;
re=find(-fa[-x]);//这里注意细节
book[x+n]=0;//清空
}
}
x=-fa[-x]还有re=find(-fa[-x])为什么要这么写,难道不可以像食物链那题一样开个2倍的fa数组吧x<0给记下来吗QAQ。