简单题,求dalao帮蒟蒻解惑
查看原帖
简单题,求dalao帮蒟蒻解惑
766275
IAKIOI2020楼主2024/8/2 23:53

第一篇题解的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。

2024/8/2 23:53
加载中...