\(2-SAT\)

考虑每个点只能选择\(R\)或\(B\),可以看作选\(0\)或\(1\)。

然后对于给出的关系式,若其中一个位置满足关系式,另两个位置就必须不满足关系式,这样就可以对于每个关系式建出\(6\)条边。

然后就是裸的\(Tarjan\)求\(2-SAT\)一组解的板子了。

代码

#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define N 5000
#define K 10000
#define Gmin(x,y) (x>(y)&&(x=(y)))
using namespace std;
int n,k,a[K+5][5],p[K+5][5];
class TwoSatSolver//2-SAT
{
private:
#define SZ 2*N
#define add(x,y) (e[++ee].nxt=lnk[x],e[lnk[x]=ee].to=y)
int ee,lnk[SZ+5],d,T,cnt,dfn[SZ+5],low[SZ+5],col[SZ+5],IS[SZ+5],S[SZ+5];
char ans[N+5];struct edge {int to,nxt;}e[6*K+5];
I void Tarjan(CI x,CI lst=0)//Tarjan缩点
{
RI i;for(dfn[x]=low[x]=++d,IS[S[++T]=x]=1,i=lnk[x];i;i=e[i].nxt)
dfn[e[i].to]?(IS[e[i].to]&&Gmin(low[x],dfn[e[i].to]))
:(Tarjan(e[i].to,x),Gmin(low[x],low[e[i].to]));
if(dfn[x]^low[x]) return;col[x]=++cnt,IS[x]=0;
W(S[T]^x) col[S[T]]=cnt,IS[S[T--]]=0;--T;
}
public:
I void Solve()
{
RI i;for(i=1;i<=k;++i)//根据给出的关系式建边
add(2*a[i][1]-p[i][1],2*a[i][2]-(p[i][2]^1)),
add(2*a[i][1]-p[i][1],2*a[i][3]-(p[i][3]^1)),
add(2*a[i][2]-p[i][2],2*a[i][1]-(p[i][1]^1)),
add(2*a[i][2]-p[i][2],2*a[i][3]-(p[i][3]^1)),
add(2*a[i][3]-p[i][3],2*a[i][1]-(p[i][1]^1)),
add(2*a[i][3]-p[i][3],2*a[i][2]-(p[i][2]^1));
for(i=1;i<=2*n;++i) !dfn[i]&&(Tarjan(i),0);//Tarjan缩点
for(i=1;i<=n;++i)
{
if(col[2*i-1]==col[2*i]) return (void)puts("-1");//若两种情况在同一强连通分量中,无解
ans[i]=col[2*i-1]>col[2*i]?'R':'B';//选择所处强连通分量编号较小的,即拓扑序较大的
}puts(ans+1);//输出答案
}
}S;
int main()
{
freopen("gamble.in","r",stdin),freopen("gamble.out","w",stdout);
RI i;char c[5];for(scanf("%d%d",&n,&k),i=1;i<=k;++i)
scanf("%d%s%d%s%d%s",&a[i][1],&c[1],&a[i][2],&c[2],&a[i][3],&c[3]),//读入
p[i][1]=c[1]=='B',p[i][2]=c[2]=='B',p[i][3]=c[3]=='B';//转化
return S.Solve(),0;
}

【2019.8.14 慈溪模拟赛 T2】黑心老板(gamble)(2-SAT)的更多相关文章

  1. 【2019.8.15 慈溪模拟赛 T2】组合数(binom)(卢卡斯定理+高维前缀和)

    卢卡斯定理 题目中说到\(p\)是质数. 而此时要求组合数向质数取模的结果,就可以用卢卡斯定理: \[C_x^y=C_{x\ div\ p}^{y\ div\ p}\cdot C_{x\ mod\ p ...

  2. 【2019.8.6 慈溪模拟赛 T2】树上路径(tree)(Trie)

    从暴力考虑转化题意 考虑最暴力的做法,我们枚举路径的两端,然后采用类似求树上路径长度的做法,计算两点到根的贡献,然后除去\(LCA\)到根的贡献两次. 即,设\(v_i\)为\(i\)到根路径上的边权 ...

  3. 【2019.8.7 慈溪模拟赛 T2】环上随机点(ran)(自然算法)

    简单声明 我是蒟蒻不会推式子... 所以我用的是乱搞做法... 大自然的选择 这里我用的乱搞做法被闪指导赐名为"自然算法",对于这种输入信息很少的概率题一般都很适用. 比如此题,对 ...

  4. 【2019.8.8 慈溪模拟赛 T2】query(query)(分治+分类讨论)

    分治 首先,我们考虑分治处理此问题. 每次处理区间\([l,r]\)时,我们先处理完\([l,mid]\)和\([mid+1,r]\)两个区间的答案,然后我们再考虑计算左区间与右区间之间的答案. 处理 ...

  5. 【2019.8.9 慈溪模拟赛 T2】摘Galo(b)(树上背包)

    树上背包 这应该是一道树上背包裸题吧. 众所周知,树上背包的朴素\(DP\)是\(O(nm^2)\)的. 但对于这种体积全为\(1\)的树上背包,我们可以通过记\(Size\)优化转移时的循环上界,做 ...

  6. 【2019.8.12 慈溪模拟赛 T2】汪哥图(wang)(前缀和)

    森林 考虑到题目中给出条件两点间至多只有一条路径. 就可以发现,这是一个森林. 而森林有一个很有用的性质. 考虑对于一棵树,点数-边数=\(1\). 因此对于一个森林,点数-边数=连通块个数. 所以, ...

  7. 【2019.8.14 慈溪模拟赛 T1】我不是!我没有!别瞎说啊!(notme)(BFS+DP)

    \(IDA^*\) 说实话,这道题我一开始没想出正解,于是写了一个\(IDA^*\)... 但神奇的是,这个\(IDA^*\)居然连字符串长度分别为\(2500,4000\)的数据都跑得飞快,不过数据 ...

  8. 【2019.8.11下午 慈溪模拟赛 T2】数数(gcd)(分块+枚举因数)

    莫比乌斯反演 考虑先推式子: \[\sum_{i=l}^r[gcd(a_i,G)=1]\] \[\sum_{i=l}^r\sum_{p|a_i,p|G}\mu(p)\] \[\sum_{p|G}\mu ...

  9. 【2019.8.11上午 慈溪模拟赛 T2】十七公斤重的文明(seventeen)(奇偶性讨论+动态规划)

    题意转化 考虑我们对于集合中每一个\(i\),若\(i-2,i+k\)存在,就向其连边. 那么,一个合法的集合就需要满足,不会存在环. 这样问题转化到了图上,就变得具体了许多,也就更容易考虑.求解了. ...

随机推荐

  1. 第05组 Alpha事后诸葛亮

    组长博客链接(2分) 组长博客链接 现代软件工程 项目Postmortem 模板(27分) 设想和目标(2分) 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? ...

  2. docker搭建zookeeper集群

    1.在官网拉取镜像 docker pull zookeeper 2.根据镜像启动zookeeper容器 docker run -itd --name zookeeper1 -h zookeeper1 ...

  3. 关于powermock报错org.powermock.reflect.exceptions.FieldNotFoundException: Field 'fTestClass' was not found in class org.junit.internal.runners.MethodValidator.问题解决

    事件背景 使用PowerMock模拟一个局部变量,添加@RunWith(PowerMockRunner.class).@PrepareForTest(StudentService.class)注解成功 ...

  4. Oracle数据 查询操作日志

    SELECT t.SQL_TEXT, t.FIRST_LOAD_TIME,t.PARSING_SCHEMA_NAME FROM v$sqlarea t WHERE t.SQL_TEXT LIKE 'D ...

  5. docker 中 安装配置 mysqlcluster(arm)

    1:创建两个docker container 这里我使用给指定 container ip的形式创建: 查看容器网络 docker network ls 创建一个新的bridge网络 docker ne ...

  6. MongoDB for OPS 03:分片 shard 集群

    写在前面的话 上一节的复制集也就是主从能够解决我们高可用和数据安全性问题,但是无法解决我们的性能瓶颈问题.所以针对性能瓶颈,我们需要采用分布式架构,也就是分片集群,sharding cluster! ...

  7. [IDA]系统注释给改掉

    IDA系统自动注释的,如果按 ';',则不会修改成功. 应该按 Shift + ;  这样才可以修改.

  8. Android应用图标尺寸以及drawable(ldpi、mdpi、hdpi、xhdpi、xxhdpi)

    应用图标: L DPI ( Low Density Screen,120 DPI ),其图标大小为 36 x 36 px M DPI ( Medium Density Screen, 160 DPI ...

  9. Go template高级用法、深入详解、手册、指南、剖析

    入门示例 以下为test.html文件的内容,里面使用了一个template语法{{.}}. <!DOCTYPE html> <html> <head> <m ...

  10. python自动登录代码

    公司有很多管理平台,账号有禁用机制,每个月至少登录一次,否则禁用.导致有时候想登录某个平台的时候,发现账号已经被禁用了,还得走流程解禁.因此用python实现了一下自动登录,每天定时任务运行一次.ps ...