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\) ...
随机推荐
- 【转载】IDEA:放置型塔防备忘录
下周开始做原型了,我需要再次细细的整理一遍设计思路,确保每一个设计都能为了我所追求的玩家体验添砖加瓦,而不是互相打架.同时本文还能提供最原始的VISION,待到将来开发万一陷入泥淖,翻出此文来可以起到 ...
- js 图表处理之Echar
官网学习链接:http://echarts.baidu.com/tutorial.html#5%20分钟上手%20ECharts 案例代码: <!DOCTYPE html> <htm ...
- CSS Margin(外边距)
CSS Margin(外边距) 一.简介 CSS margin(外边距)属性定义元素周围的空间. margin 清除周围的(外边框)元素区域.margin 没有背景颜色,是完全透明的. margin ...
- 20145309《Java程序设计》第七周学习总结
教材学习内容总结 第13章 时间与日期 13.1 认识时间与日期 13.1.1 时间的度量 格林威治时间(GMT) 世界时(UT) 国际原子时(TAI) 世界协调时间(UTC) Unix时间:Unix ...
- ubuntu下 gedit中文乱码
Gedit 3.x 版本设置 (适用于Ubuntu 11.10及以后) 命令方式 gsettings set org.gnome.gedit.preferences.encodings auto-de ...
- ArchLinux基本系统到XFCE4桌面搭建
Keep It Simple, Stupid 这是ArchLinux的哲学,更是一种人生哲学 好久没用linux了,这段时间因为一点点"破坏性"需求重新拾起linux用了一把 ...
- JAVA基础补漏--文件读取
public class Test2 { public static void main(String[] args) throws IOException { FileInputStream fis ...
- 爬虫之urllib2库的基本使用
urllib2库的基本使用 所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地. 在Python中有很多库可以用来抓取网页,我们先学习urllib2. urllib2 是 P ...
- LeetCode——maximal-rectangle
Question Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ...
- LeetCode——Maximum Product of Three Numbers
Question Given an integer array, find three numbers whose product is maximum and output the maximum ...