2-SAT

需要连通性相关中的强联通分量缩点。

函数

  • void Add(int x,int a,int y,int b)\texttt{void Add(int x,int a,int y,int b)}:添加条件“若 xx 的取值为 aa,则 yy 的取值为 bb”。
  • bool _2sat()\texttt{bool \_2sat()}:判断是否有解。

代码

void Add(int x,int a,int y,int b){
	//if(x=a)y=b
	G1.add(x+a*n,y+b*n);
	G1.add(y+(1-b)*n,x+(1-a)*n);
}
bool _2sat(){
	for(int i=1;i<=2*n;i++)
		if(!dfn[i])
			tarjan(i);
	for(int i=1;i<=n;i++)
		if(col[i]==col[n+i])
			return 0;
	return 1;
}
posted @ 2023-08-29 23:20  luckydrawbox  阅读(5)  评论(0)    收藏  举报  来源