博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces 468B 2-sat
阅读量:6281 次
发布时间:2019-06-22

本文共 1291 字,大约阅读时间需要 4 分钟。

今天明确了2-SAT;
表示对一对整数之间的关系是否存在

#include
#include
#include
#include
#include
using namespace std;const int Maxn = 1e5+10;int mark[Maxn << 1];int s[Maxn * 2],top,tp;int head[Maxn*2];map
mp;int x[Maxn * 2];struct { int v,next;}E[Maxn << 2];void init(){ memset(head,-1,sizeof(head)); memset(E,-1,sizeof(E)); tp = 0;}int n,m,a,b;void addedge(int u,int v){ E[tp].v = v; E[tp].next = head[u]; head[u] = tp++;}bool dfs(int x){ if(mark[x^1])return false; if(mark[x])return true; mark[x] = true; s[top++] = x; for(int i=head[x];i!=-1;i=E[i].next){ int v = E[i].v; if(!dfs(v))return false; } return true;}bool solve(){ for(int i=0;i
0)mark[s[--top]] = false; if(!dfs(i+1)) return false; } } } return true;}int main(){ init(); cin >> n >> a >> b; for(int i = 1;i<= n;i++){ scanf("%d",&x[i]); mp[x[i]] = i; } for(int i=1;i<=n;i++){ int val = x[i],s = i; s--; int t = mp[a - val];t--; if(!mp[a-val])addedge(2*s,2*s+1); else { addedge(2*s,2*t); addedge(2*t+1,2*s+1); } t=mp[b-val]; t--; if(!mp[b-val]) addedge(2*s+1,2*s); else{ addedge(2*s+1,2*t+1); addedge(2*t,2*s); } } if(!solve()){ puts("NO"); } else { printf("YES\n"); for(int i=0;i<2*n;i+=2){ if(i!=0) printf(" "); if(mark[i]) printf("0"); else printf("1"); } printf("\n"); }}

转载地址:http://ruiva.baihongyu.com/

你可能感兴趣的文章
asp.net 关于提示“当前上下文中不存在名称"XXX"”的一种情况的解决办法
查看>>
MOSS系列二 创建第一个SharePoint站点
查看>>
Detach Volume 操作 - 每天5分钟玩转 OpenStack(55)
查看>>
MySQL5.6 部署MHA
查看>>
DG配置网络,报ORA-12514: TNS:listener does not...
查看>>
hadoop开启webHDFS服务及测试
查看>>
DC学院学习笔记(十七):分类及逻辑回归
查看>>
Spring Aop(一)——Aop简介
查看>>
document.createElement
查看>>
Outlook Anywhere 客户端配置详解
查看>>
Go语言学习资料整理
查看>>
精进不休 .NET 4.0 (3) - asp.net 4.0 新特性之动态数据(Dynamic Data)增强
查看>>
麻将游戏
查看>>
用“ICET”轻松诊断 Windows 7 网络连接高级功能
查看>>
在MPAndroidChart库K线图的基础上画均线
查看>>
Gradle 1.12用户指南翻译——第四十四章. 分发插件
查看>>
查询远程或本地计算机的登录账户
查看>>
chk cloud
查看>>
asp.net事件顺序
查看>>
即时数据模块设计 版本V2
查看>>