
2-SAT
青烟绕指柔!
我不怕千万人阻挡,只怕自己投降。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
[PA2010]Riddle
题目链接:[PA2010]Riddle不难看出可以使用2-SAT去解决。对于每条边来说,相当于就是某个端点不取,另一个端点必须取。对于每个集合来说,我们就是如果这个点取,那么其他点不能取。但是不能暴力连边。我们可以如下建图:1 < 2 < 3 < 4 < 5 …1 > 2 > 3 > 4 > 5 …分别加上两排点,然后对于某个点取,往前后位置连边即可。因为数据比较大,边很多,所以用vector建图会TLE。pushback次数太多。AC代原创 2020-12-15 19:56:06 · 285 阅读 · 0 评论 -
旅游胜地
题目链接:旅游胜地显然可以二分最小值。然后对于一个点取某个值的时候,对于相邻的点我们有能选或者不能一起选,直接2-SAT即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=2e5+10;int n,m,a[N],b[N],dfn[N],low[N],cnt原创 2020-11-23 20:47:57 · 231 阅读 · 2 评论 -
Flags
题目链接:Flags首先这个可以二分。然后这个东西可以 2-SAT,然后我们可以发现我们对每个点连边的时候连的是一个区间。所以我们可以用线段树优化。如果对每个点都建立选 or 不选两个点的话,我们就需要两颗线段树了。我们可以优化一下,对于一个点选的话,我们找到这个区间不能选的点,然后就是连向这个区间所有点的另一个点,也就是选这个点,那么必须选这个区间的另一个点。然后找区间的时候,不能连向自己的反点。AC代码:#pragma GCC optimize("-Ofast","-funroll-al原创 2020-08-21 22:14:26 · 453 阅读 · 0 评论 -
TV Show Game
题目链接:TV Show Game因为每一个灯只有两种状态,所以我们可以按照灯的状态来2-SAT。如果某个人选了某个灯,但是灯的实际颜色相反,那么另外的两个灯就必须相同。所以按照这个建图即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=1e5+10;i原创 2020-06-08 11:43:44 · 434 阅读 · 0 评论 -
CF662B Graph Coloring
题目链接:CF662B Graph Coloring显然我们可以对于不同的颜色单独考虑。假设我们全部变为‘B’,那么如果当前边是‘B’,我们只能选择两个端点全部改变,或者都不改变。如果当前为‘R’,那么两个端点一定是一个改变,一个不改变。然后显然可以直接2-SAT,现在就是怎么对2-SAT求最小解的问题了。我们假设点i为改变,点i+n为不改变,所以我们对于每个强连通分量单独考虑,然后记录联通块i,和联通块i+n,然后哪个里面的小于n的点的个数更少,就以哪个为基准即可。AC代码:#pragm原创 2020-05-21 15:09:37 · 304 阅读 · 0 评论 -
Xor the graph
题目链接:Xor the graph对于每条边,如果左右相等那么就是一个选,一个不选的问题了。然后2-SAT搞一搞就行了,然后x随机输出一个正确率都挺大的。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing...原创 2020-03-30 22:23:13 · 168 阅读 · 0 评论 -
Codeforces - The Door Problem
题目链接:Codeforces - The Door Problem如果从灯泡的角度思考,比较麻烦。我们直接想开关,每个开关只有两种选择。然后对于每个灯泡可以确定开关的选择,最后2-SAT即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define ...原创 2020-02-17 18:05:43 · 268 阅读 · 0 评论 -
Codeforces - Two Sets
题目链接:Codeforces - Two Sets要么属于集合A,要么属于集合B。显然的2-SAT问题,按照关系建图即可。如果表示不可能则建矛盾边即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing ...原创 2020-02-08 17:14:38 · 286 阅读 · 0 评论 -
处女座与宝藏
题目描述处女座进行了一次探险,发现了一批宝藏。如果他获得这批宝藏,那么他一辈子都不需要工作了。但是处女座遇到了一个难题。宝藏被装在n个宝箱里,宝箱编号为1,2,…,n,只有所有宝箱在某一时间被打开,处女座才能获得宝藏。有m个开关,每个开关控制k个宝箱,如果按下一个开关,那么这k个宝箱的开关状态都会发生改变(从开启变成关闭,从关闭变成开启),处女座想知道他能否获得这批宝藏。输入描述:第一行两...原创 2019-11-26 22:03:03 · 265 阅读 · 0 评论 -
卡图难题
有N个变量X0~XN−1,每个变量的可能取值为0或1。给定M个算式,每个算式形如 XaopXb=c,其中 a,b 是变量编号,c 是数字0或1,op 是 and,or,xor 三个位运算之一。求是否存在对每个变量的合法赋值,使所有算式都成立。输入格式第一行包含两个整数N和M。接下来M行,每行包含三个整数a b c,以及一个位运算(AND,OR,XOR中的一个)。输出格式输出结果,如果...原创 2019-11-23 18:37:10 · 270 阅读 · 0 评论 -
HDU - 3062 Party
有n对夫妻被邀请参加一个聚会,因为场地的问题,每对夫妻中只有1人可以列席。在2n 个人中,某些人之间有着很大的矛盾(当然夫妻之间是没有矛盾的),有矛盾的2个人是不会同时出现在聚会上的。有没有可能会有n 个人同时列席?Inputn: 表示有n对夫妻被邀请 (n<= 1000)m: 表示有m 对矛盾关系 ( m < (n - 1) * (n -1))在接下来的m行中,每行会有4个数...原创 2019-10-17 16:50:59 · 264 阅读 · 0 评论 -
HDU - 1824 Let's go home
Let’s go homeTime Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2756 Accepted Submission(s): 1192Problem Description小时候,乡愁是一枚小小的邮票,我在这头,母亲在...原创 2019-09-17 22:02:03 · 258 阅读 · 0 评论 -
[JSOI2010]满汉全席
题目描述满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中。由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做出满汉全席,而能够烹饪出经过专家认证的满汉全席,也是中国厨师最大的荣誉之一。世界满汉全席协会是由能够料理满汉全席的专家厨师们所组成,而他们之间还细分为许多不同等级的厨师。为了招收新进的厨师进入世界满汉全席协会,将于近日举办满汉...原创 2019-09-08 20:55:05 · 260 阅读 · 0 评论