首页 > 其他分享 >two-sat模板

two-sat模板

时间:2023-09-25 11:12:52浏览次数:35  
标签:include int two scc dfn low fo 模板 sat

P4782 【模板】2-SAT 问题

就是给关系进行连边,然后判断是否存在矛盾
输出方案的时候,就是在拓扑图上沿着反边走,但实际上tarjan求强连通分量已经排好序了
编号小的scc就是在拓扑序中排在后面的强连通分量

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#define fo(i,a,b) for (ll (i)=(a);(i)<=(b);(i)++)
#define fd(i,b,a) for (int (i)=(b);(i)>=(a);(i)--)
#define mk(x,y) make_pair((x),(y))

using namespace std;
typedef double db;
typedef long long ll;
const int N =1e6+6;
int tot,head[N*2],nex[N*2],to[N*2];
int low[N*2],dfn[N*2],st[N*2],top,cnt,now,scc[N*2];
int n,m,x,y,a,b;
void add(int x,int y){
	to[++tot]=y; nex[tot]=head[x]; head[x]=tot;
}
void dfs(int x){
	st[top++]=x;
	dfn[x]=low[x]=++now;
	for (int i=head[x];i;i=nex[i]){
		int v=to[i];
		if (!dfn[v]){
			dfs(v);
			low[x]=min(low[x],low[v]);
		}
		else if (!scc[v]) low[x]=min(low[x],dfn[v]);
	}
	
	if (low[x]==dfn[x]){
		++cnt; int v;
		while (1){
			v=st[--top];
			scc[v]=cnt;
			if (x==v) break;
		}
	}
}
int main()
{
//	freopen("data.in","r",stdin);

	scanf("%d %d",&n,&m);
	fo(i,1,m){
		scanf("%d %d %d %d",&x,&a,&y,&b); 
		
		add(x+(1-a)*n, y+b*n);
		add(y+(1-b)*n, x+a*n);
	}
	
	fo(i,1,2*n) if (!dfn[i]) dfs(i);
	
	bool flag=1;
	fo(i,1,n) if (scc[i]==scc[i+n]) flag=0;
	if (!flag) puts("IMPOSSIBLE");
	else {
		puts("POSSIBLE");
		fo(i,1,n) printf("%d ",scc[i]>scc[i+n]);
	}
	
	return 0;
}

 

标签:include,int,two,scc,dfn,low,fo,模板,sat
From: https://www.cnblogs.com/ganking/p/17727483.html

相关文章

  • 使用 goland 的模板提高编码效率
    整体步骤来自chatgpt概述我觉得编译器有几个很提效的工具:快捷键、代码补全和代码模板。前两个没啥可说的,今天想分享的是代码模板。在Goland里被称之为LiveTemplates。在代码里输入forr,随后会出现如下的可选项,选中按下回车后,会自动生活一个forrange的遍历模板,通过ta......
  • 如何在 SOLIDWORKS中创建零件模板 硕迪科技
    作为一款多功能且可大量定制的3DCAD软件,SOLIDWORKS模板可以通过自定义属性包含大量数据。可以通过为SOLIDWORKS零件、装配体和工程图创建模板来利用这些模板。与其他一些CAD软件不同,SOLIDWORKS不限制您可以创建的模板数量-您可以根据需要创建任意数量的零件、装配体和工程图模......
  • 基于方向编码的模板匹配算法matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本MATLAB2022a 3.算法理论概述       模板匹配是一种常见的计算机视觉方法,用于在一幅图像中寻找指定的模板。它在目标检测、图像识别、物体跟踪等领域中有广泛的应用。基于方向编码的模板匹配算法是一种改进的模板......
  • 【模板】多项式乘法、乘法逆、除法、取模、常系数齐次线性递推
    以下代码必须开-O2#include<algorithm>#include<cassert>#include<cstdio>#include<cstring>#include<vector>usingnamespacestd;#ifdefLOCAL#definedebug(...)fprintf(stderr,##__VA_ARGS__)#else#definedebug(...)void(0)#......
  • KMP【模板】
    P3375【模板】KMP字符串匹配点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintN=1e6+10;strings1,s2;intne[N];voidget_ne(){ ne[1]=0; intn=s2.length(); for(inti=2,j=0;i<=n;i++){ while(j&&s2[j+1]!=s2[......
  • 模板
    #include<bits/stdc++.h>usingnamespacestd;#definelsp<<1#definersp<<1|1#definelsonls,l,mid#definersonrs,mid+1,r#defineroot1,1,nconstintN=1e6+9,mod=1e9+7;typedeflonglongll;intn,m,a[N];structtree{ intl,r,......
  • portswigger——服务器端模板注入(SSTI)
    什么是服务器端模板注入?服务器端模板注入是指攻击者能够使用本机模板语法将恶意负载注入模板,然后在服务器端执行。模板引擎旨在通过将固定模板与易失性数据相结合来生成网页。当用户输入直接连接到模板中,而不是作为数据传入时,可能会发生服务器端模板注入攻击。这允许攻击者注入......
  • avformat_network_init()解析备忘
    基于ffmpeg-6.0.avformat_network_init()函数定义如下:intavformat_network_init(void){#ifCONFIG_NETWORKintret;if((ret=ff_network_init())<0)returnret;if((ret=ff_tls_init())<0)returnret;#endifreturn0;}可以......
  • opencv 基于形状的模板匹配
    1.问题或需求描述opencv基于形状的模板匹配测试2.解决方法或原理:主要步骤:使用opencv查找轮廓(findContours)匹配轮廓(形状)(matchShapes)的相似度python代码:importcv2#读取目标图像target_image=cv2.imread('target.png',cv2.IMREAD_COLOR)#读取模板图像template_image......
  • gephi导入networkx:使用经纬度绘图并根据情景计算节点指标与网络整体指标(关联gephi导入
    此随笔为储存代码用首先展示gephi的json文件{"attributes":{"creator":"Gephi0.10.1"},"options":{"multi":false,"allowSelfLoops":true,"type":"undirected"},......