博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ2199: [Usaco2011 Jan]奶牛议会
阅读量:6441 次
发布时间:2019-06-23

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

趁此机会学了一下2-SAT。

以前的2-SAT都是用并查集写的,只能应用于极小的一部分情况,这次学了一正式的2-SAT,是用一张有向图来表示其依赖关系。

2-SAT的介绍参见刘汝佳《训练指南》。

1 /************************************************************** 2     Problem: 2199 3     User: zhuohan123 4     Language: C++ 5     Result: Accepted 6     Time:140 ms 7     Memory:1388 kb 8 ****************************************************************/ 9  10 #include 
11 #include
12 #include
13 #include
14 using namespace std;15 int n,m;16 struct point{
int y,n;}p[1100];int pnum;17 int head[2100];18 struct edge{
int next,to;}g[11000];int gnum;19 void addedge(int from,int to)20 {21 g[++gnum].to=to;g[gnum].next=head[from];head[from]=gnum;22 }23 int q[2100],l,r;24 bool cango[2100];25 bool check(int po)26 {27 memset(cango,0,sizeof cango);28 cango[po]=true;l=1;r=0;q[++r]=po;29 while(l<=r)30 for(int i=head[q[l++]];i;i=g[i].next)31 if(!cango[g[i].to])cango[q[++r]=g[i].to]=true;32 for(int i=1;i<=n;i++)33 if(cango[p[i].y]&&cango[p[i].n])return false;34 return true;35 }36 char ans[1100];37 int main(int argc, char *argv[])38 {39 #ifndef ONLINE_JUDGE40 freopen("1.in","r",stdin);41 freopen("1.out","w",stdout);42 #endif43 scanf("%d%d",&n,&m);44 for(int i=1;i<=n;i++)p[i].n=++pnum,p[i].y=++pnum;45 while(m--)46 {47 int b,c;char vb[4],vc[4];48 scanf("%d%s%d%s",&b,vb,&c,vc);49 if(vb[0]=='Y'&&vc[0]=='Y')addedge(p[b].n,p[c].y),addedge(p[c].n,p[b].y);50 if(vb[0]=='Y'&&vc[0]=='N')addedge(p[b].n,p[c].n),addedge(p[c].y,p[b].y);51 if(vb[0]=='N'&&vc[0]=='Y')addedge(p[b].y,p[c].y),addedge(p[c].n,p[b].n);52 if(vb[0]=='N'&&vc[0]=='N')addedge(p[b].y,p[c].n),addedge(p[c].y,p[b].n);53 }54 for(int i=1;i<=n;i++)55 {56 bool by=check(p[i].y),bn=check(p[i].n);57 if(by&&bn)ans[i]='?';58 else if(by)ans[i]='Y';59 else if(bn)ans[i]='N';60 else {puts("IMPOSSIBLE");return 0;}61 }62 puts(ans+1);63 return 0;64 }

P.S.这个代码写的相当非主流啊!

转载于:https://www.cnblogs.com/zhuohan123/p/3285261.html

你可能感兴趣的文章
vue的todolist -- 增删改查
查看>>
Go圣经-学习笔记入门
查看>>
微软工程师:构建强大的实时流式应用选择Apache Calcite
查看>>
混合云场景下容器技术在新能源功率预测产品中的最佳实践
查看>>
/etc/security/limits.conf的相关说明
查看>>
在docker中使用mysql数据库,在局域网访问
查看>>
10个最佳Node.js企业应用案例:从Uber到LinkedIn
查看>>
XML的解析方式
查看>>
HTTP各版本比较
查看>>
StringUtils.isEmpty和StringUtils.isBlank用法
查看>>
JSON学习
查看>>
echo和Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
查看>>
VC++设置远程调试
查看>>
11-1 11 LAMP复习 安装
查看>>
Android调用JS,带传参到JS需要注意的点
查看>>
SpringMVC--纯净版框架整合配置
查看>>
深入解析php中的foreach问题
查看>>
踩坑之路之DNS域名解析
查看>>
1.1 学习之初 1.2 约定 1.3 认识Linux 1.4 安装虚拟机 1.5 安装centos
查看>>
angular4跨域请求问题
查看>>