bzoj4945
题解:
一眼看过去还以为是3-sat
其实d只有8
那么我们可以枚举每一个x选择哪一个
然后再用2-sat处理
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=,M=N<<,ABC='A'+'B'+'C';
struct Edge{int to,next;}e[M];
int n,m,K,pos[],zz[M],ne[M],mi[N],mj[N],fi[N<<],len,st[N],cot;
char Str[N],hi[N],hj[N];bool Mark[N<<],Un[N<<];
void jb(int x,int y)
{
zz[++len]=y;ne[len]=fi[x];fi[x]=len;
zz[++len]=x^;ne[len]=fi[y^],fi[y^]=len;
}
int dfs(int x)
{
if (Mark[x^]||(n>&&Un[x]))return ;
if (Mark[x])return ;
Mark[x]=;st[++cot]=x;
for (int i=fi[x];i;i=ne[i])
if (!dfs(zz[i]))
{
Un[x]=;
return ;
}
return ;
}
void init()
{
memset(fi,,sizeof fi);
memset(Mark,,sizeof Mark);
memset(Un,,sizeof Un);
}
int pd()
{
len=;int n1,n2;
init();
for (int i=;i<=m;i++)
{
if (hi[i]==Str[mi[i]])continue;
n1=hi[i]>ABC-hi[i]-Str[mi[i]];
if (hj[i]==Str[mj[i]])jb(mi[i]<<|n1,mi[i]<<|n1^);
else n2=hj[i]>ABC-hj[i]-Str[mj[i]],jb(mi[i]<<|n1,mj[i]<<|n2);
}
for (int i=;i<=n;i++)
{
cot=;
if (!dfs(i<<))
{
while (cot)Mark[st[cot--]]=;
if (!dfs(i<<|))return ;
}
}
for (int i=;i<=n;i++)
if (Mark[i<<])putchar(Str[i]=='A'?'B':'A');
else putchar(Str[i]=='C'?'B':'C');
return ;
}
int main()
{
scanf("%d%d%s%d",&n,&K,Str+,&m);
int cnt=;
for (int i=;i<=m;i++)scanf("%d%s%d%s",&mi[i],&hi[i],&mj[i],&hj[i]);
for (int i=;i<=n;i++)
if (Str[i]=='x')pos[cnt++]=i;else Str[i]+='A'-'a';
for (int i=;i<<<K;i++)
{
for (int j=;j<K;j++)Str[pos[j]]='A'+(i>>j&);
if (pd())return ;
}
puts("-1");
return ;
}
bzoj4945的更多相关文章
- 【BZOJ4945】[Noi2017]游戏 2-SAT
[BZOJ4945][Noi2017]游戏 题目描述 题解:2-SAT学艺不精啊! 这题一打眼看上去是个3-SAT?哎?3-SAT不是NPC吗?哎?这题x怎么只有8个?暴力走起! 因为x要么不是A要么 ...
- LG3825/BZOJ4945/LOJ2305 「NOI2017」游戏 dfs+2-SAT
问题描述 LG3825 BZOJ4945 LOJ2305 题解 发现对于每个地图,如果没有\(A,B,C\)地图不可以使用\(a,b,c\),就是一个\(\mathrm{3-SAT}\)问题. 有了这 ...
- 【BZOJ4945】【NOI2017】游戏(搜索,2-sat)
[NOI2017]游戏(搜索,2-sat) 题面 BZOJ的SPJ是假的 兹磁洛谷 题解 如果没有\(x\)地图的影响 这就是一个裸的\(2-sat\)问题 但是现在有不超过\(8\)个\(x\)地图 ...
- [BZOJ4945][Noi2017]游戏 2-sat
对于所有的x,我们枚举他的地图类型,事实上我们只需要枚举前两种地形就可以覆盖所有的情况. 之后就变成了裸的2-sat问题. 对于一个限制,我们分类讨论: 1.h[u]不可选,跳过 2.h[v]不可选, ...
- BZOJ4945 & 洛谷3825 & UOJ317:[NOI2017]游戏——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4945 https://www.luogu.org/problemnew/show/P3825 ht ...
- [bzoj4945][Noi2017]游戏
题目大意:有$n$个位置,有三种数,每个位置只可以填一种数,$d(d\leqslant8)$个位置有三种选择,其他位置只有两种选择.有一些限制,表示第$i$个位置选了某种数,那么第$j$个位置就只能选 ...
- 【BZOJ4945&&UOJ317】游戏(2-sat,拓扑序)
题意: 思路: 输出方案时有一个优秀的性质可以利用: tarjan缩点之后点所属的分量编号是原图的反的拓扑序 所以只需要在两种方案内找到所属分量编号较小的那个就行了,用来满足(i,i')那个限制 #i ...
- 【bzoj4945】[Noi2017]游戏(搜索+2-sat)
bzoj 洛谷 题意: 现在有\(a,b,c\)三种车,每个赛道可能会存在限制:\(a\)表示不能选择\(a\)类型的赛车,\(b,c\)同理:\(x\)表示该赛道不受限制,但\(x\)类型的个数$\ ...
- 并不对劲的bzoj4945:loj2305:uoj317:p3825[NOI2017]游戏
题目大意 2-SAT,其中有\(d\)(\(d\leq 8\))个点是\(3-SAT\). 题解 枚举\(d\)个点不取三个中(假设三个为\(a,b,c\))的哪一个,然后整体变成做\(2-SAT\) ...
随机推荐
- Hadoop 2.0 上深度学习的解决方案
原文连接:https://www.paypal-engineering.com/tag/data-science/ 摘要:伴随着数据的爆炸性增长和成千上万的机器集群,我们需要使算法可以适应在如此分布的 ...
- IDEA 编译报错: 未结束的字符串文字
最近在搞新项目,同事用的eclipse开发,而我用的是ide,项目初始是由同事创建的,项目编码是UTF-8,而我开发的ide工具默认是GBK编码,导致在编译的时候报错: 未结束的字符串文字 这个问题就 ...
- C++之条形码,windows下zint库的编译及应用(二)
zint库是一个开源的第三方库,提供了生成条形码.二维码等功能.本文主要介绍zint库的生成及简单应用. 0windows下zint库的编译及应用(一) 工具/原料 vs2012 生成条形 ...
- jenkins邮箱配置以及结合ansible进行批量构建
tomcat8.5以上版本,jenkins2.7以上版本 首先填写你的系统管理员邮件地址,否则会使用jenkins系统本身的邮箱 填写的163邮箱,通过smtp认证填写正确的账号和密码(注意这里的密码 ...
- 20145310 《Java程序设计》第6周学习总结
20145310 <Java程序设计>第6周学习总结 教材学习内容总结 本周主要进行第十章和第十一章的学习. 第十章 Java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流 ...
- 20145313张雪纯 《Java程序设计》第6周学习总结
20145313张雪纯 <Java程序设计>第6周学习总结 教材学习内容总结 将数据从来源中取出,可以使用输入串流:将数据写入目的地,可以使用输出串流. 输入串流代表对象为java.io. ...
- Python for循环文件
for 循环遍历文件:打印文件的每一行 #!/usr/bin/env python fd = open('/tmp/hello.txt') for line in fd: print line, 注意 ...
- swift学习笔记 - Range、ClosedRange、CountableClosedRange与CountableRange学习
移动端访问不佳,请访问我的个人博客 在使用swift的过程中字符串操作的时候会用到Range,刚开始使用起来各种别扭,然后发现居然还有ClosedRange.CountableClosedRange和 ...
- Android 图形基础类Rect,扎实基础助腾飞
转载请注明出处:王亟亟的大牛之路 上周把"垃圾桶动画写完了",然后这礼拜寻思着学习点啥,脑子闷逼了大半天,然后就找了点基础源码读读,把看的经历分享给大家. 先安利:https:// ...
- Zookeeper Zkclient客户端
Zkclient是对Zookeeper的原生API进行了包装,实现了超时重连.Watcher反复注册等功能,它可以实现递归创建,删除节点,但是zkClient不能递归给节点赋值. 主要的api如下: ...