ACM-图论-2-SAT
暗金色
这个作者很懒,什么都没留下…
展开
-
HDU - 1815 Building roads (2-SAT)
题目大意:给出N个农场,S1场地和S2场地的坐标,要求每个农场要么和S1场地连接要么和S2场地连接,且每个农场之间的连接距离的最大值最小 现在给出A种不可连接限制,表明两个农场不能和同一个场地连接 又给出B种连接限制,表明两个农场要和同一个场地连接解题思路:这题处理时有点恶心 二分枚举最大距离L,判断一下每个农场可连接的场地(以下的连边表示,a表示和S1连接,!a表示和S2连接) 如果dis原创 2015-08-11 11:36:44 · 1138 阅读 · 0 评论 -
HDU - 4115 Eliminate the Conflict(2-SAT)
题目大意:有两个人玩剪刀石头布,已经知道A的所有出法,A为了赢,给B设置了M种限制,限制为a,b,c如果c == 1,那么B第a回合和第b回合的出法要不同 如果c == 0,那么B第a回合和第b回合的出法要相同 如果B能一回合都不输,且遵循M种限制,那么B就赢了,问B最后能否能赢解题思路:要不输的话,那么就只能平局或者赢了,先预处理每回合的出法接着处理限制条件,如果限制条件c == 1,且有出法原创 2015-08-11 11:54:51 · 808 阅读 · 1 评论 -
UVALive - 3713 Astronauts(2-SAT)
题目大意:有A,B,C 3个任务要飞配给n个宇航员,现给出n个宇航员的年龄和每种任务的执行要求。 A任务只有年龄大于等于平均年龄的宇航员才可以执行 B任务只有年龄小于平均年龄的宇航员才可以执行 C任务任何宇航员都可以执行 现在有M对讨厌关系,互相讨厌的宇航员不能执行同一种任务,现要求找出一个满足上述所有要求的任务分配方案解题思路:年龄大于等于平均年龄的宇航员只能执行A任务或者C任务,假设执原创 2015-08-08 11:55:45 · 765 阅读 · 0 评论 -
POJ - 3683 Priest John's Busiest Day(2-SAT)
题目大意:给出开始时间,结束时间和持续时间,每个时间段只能选择[开始时间,开始时间+持续时间]或者[结束时间-持续时间,结束时间],问区间会不会覆盖解题思路:2-SAT裸题#include <cstdio>#include <cstring>#include <vector>using namespace std;const int MAXNODE = 2010;vector<int> G原创 2015-09-09 23:20:16 · 529 阅读 · 0 评论 -
POJ - 3905 Perfect Election(2-SAT)
题目大意:题意挺好理解的解题思路:就按照题意来建边就可以了#include <cstdio>#include <cstring>#include <vector>using namespace std;const int MAXNODE = 2010;vector<int> G[MAXNODE];bool mark[MAXNODE * 2];int Stack[MAXNODE * 2];原创 2015-09-09 20:38:28 · 466 阅读 · 0 评论 -
HDU - 4421 Bit Magic
题目大意:看图就知道题目大意了 解题思路:每一位分开进行计算判断#include <cstdio>#include <cstring>#include <vector>using namespace std;const int MAXNODE = 1010;const int N = 510;bool mark[MAXNODE];vector<int> G[MAXNODE];int S原创 2015-09-09 21:34:39 · 440 阅读 · 0 评论 -
LightOJ - 1251 Forming the Council(2-SAT)
题目大意:N张票,M个人,每张票的形式如下 土i 土j,如果是+,表示要求留下,如果是-,表示要求离开 问能否满足每张票的其中一个要求,如果可以,输出多少个人留下,并按升序输出留下的人解题思路:2-SAT的模版题,这里只是验证一下模版#include <cstdio>#include <cstring>#include <vector>using namespace std;const i原创 2015-11-01 11:01:19 · 568 阅读 · 0 评论 -
2-SAT详解
以下内容摘自《算法竞赛入门经典训练指南》:2-SAT问题是这样的:有n个布尔变量xi,另有m个需要满足的条件,每个条件的形式都是“xi为真/假或者xj为真/假“2-SAT的解法有多种不同的叙述方式,这里采用一种比较容易理解的,且效率也不错的方式。构造一张有向图,其中每个变量xi拆分成两个结点2i和2i + 1,分别表示xi为假和xi为真,最后要为每个变量选其中的一个结点进行标记,比如标记了2i,表示转载 2015-11-01 10:37:31 · 1147 阅读 · 0 评论 -
HDU - 1816 Get Luffy Out *(二分 + 2-SAT)
题目大意:有N串钥匙,M对锁。每串钥匙只能选择其中一把,如何选择,才能使开的锁达到最大(锁只能按顺序一对一对开,只要开了其中一个锁即可)解题思路:这题跟HDU - 3715 Go Deeper 这题的限制比较简单,都是二选一,2-SAT的裸题,只不过加了二分而已 附上HDU - 3715 Go Deeper题解#include <cstdio>#include <cstring>#inclu原创 2015-08-11 08:38:28 · 949 阅读 · 0 评论 -
HDU - 3715 Go Deeper (二分 + 2-SAT)
题目大意:给出一个递归函数,问这个递归函数最多能递归几层解题思路:二分枚举递归层数,然后依此建边如果给出的c[i]为0时,那么x[a[i]]和x[b[i]]中的其中一个要为真,连边即为 !a[i]->b[i], !b[i] -> a[i]如果给出的c[i]为1时,那么x[a[i]]和x[b[i]]两个要么都为真,要么都为假,连边即为a[i]->b[i], b[i]->a[i], !a[i]->!b[原创 2015-08-11 08:31:05 · 1234 阅读 · 0 评论 -
UVA - 10319 Manhattan
题目大意:有一个网格,S行,A列,现在要求你将这些行列定向,使得所有的起点都能满足:最多拐一个弯就能到达终点解题思路:同一个位置的话就不用考虑了 同一行或同一列的话,就直接定向 如果不同行不同列的话,就要满足(s1 & a2) || (a1 & s2) 变化一下,就变成了(s1 | a1) & (s1 | s2) & (a2 | a1 ) & (a2 | s2)#include <cstdi原创 2015-09-09 20:06:57 · 447 阅读 · 0 评论 -
POJ - 3678 Katu Puzzle(2-SAT)
题目大意:给出每两个数的运算结果,问这些结果间是否存在矛盾解题思路:直接看代码吧#include <cstdio>#include <cstring>#include <vector>using namespace std;#define N 2010vector<int> G[N];bool mark[N];int n, m, top;int S[N];void AddEdge(in原创 2015-08-11 12:05:42 · 469 阅读 · 0 评论 -
POJ - 3207 Ikki's Story IV - Panda's Trick(2-SAT)
题目大意:有一个圈,圈上面按顺时针摆满了1-N,现在有M条连线(两点连线,连线可以为曲线,可以在圈内连线,也可在圈外连线),问这些连线是否相交解题思路:判断相交的话,只需要判断线的区间是否相交即可#include <cstdio>#include <cstring>#include <vector>using namespace std;#define M 1010struct link{原创 2015-08-11 12:02:11 · 777 阅读 · 0 评论 -
UVALive - 3211 Now or later (2-SAT)
题目大意:有n架飞机需要着陆。每架飞机有两种选择,早着陆或者晚着陆,二选其一 现在为了保证飞机的着陆安全,要求两架着陆的飞机的时间间隔的最小值达到最大解题思路:最小值最大,二分枚举 设第i架飞机选择着陆方式为a,第j架飞机选择着陆的方式为b,枚举的时间间隔为mid 如果abs(plane[i][a] - plane[j][b]) < mid,表明这两架飞机以这样的着陆方式是矛盾的,所以只能二选原创 2015-08-08 11:45:09 · 770 阅读 · 0 评论 -
UVA - 11294 Wedding(2-SAT)
题目大意:有N-1对夫妻参加一个婚宴,所有人都坐在一个长长的餐桌左侧或者右侧,新郎和新娘面做面坐在桌子的两侧。由于新娘的头饰很复杂,她无法看到和她坐在同一侧餐桌的人,只能看到对面餐桌的人。任意一对夫妻不能坐在桌子的同侧,另有有m对人吵过架,而新娘不希望看到两个吵过架的人,问如何安排这些座位解题思路:设mark[2*i]被标记时表示的是第i对夫妻的妻子跟新娘坐在一起,mark[2 * i + 1]被标原创 2015-08-08 18:22:36 · 1228 阅读 · 0 评论 -
UVALive - 4452 The Ministers' Major Mess(2-SAT)
题目大意:有n个人对m个方案投票,每个人最多只能对其中的4个方案投票(其他的相当于弃权),每一票要么支持要么反对。问是否存在一个最终决定,使得每个投票人都有超过一半的建议被采纳,在所有可能的最终决定中,哪些方案的态度是确定的解题思路:参考了一下别人的思路,学习了 当想要确定某一个状态(i)时,可用用他的相反状态(i^1)和该状态建立一条边,那样的话,每当dfs到他的相反状态,就会报错了在理解了上面原创 2015-08-09 16:23:08 · 1120 阅读 · 0 评论 -
HDU - 1824 Let's go home(2-SAT)
题目大意:小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。 ―― 余光中 集训是辛苦的,道路是坎坷的,休息还是必须的。经过一段时间的训练,lcy决定让大家回家放松一下,但是训练还是得照常进行,lcy想出了如下回家规定,每一个队(三人一队)或者队长留下或者其余两名队员同时留下;每一对队员,如果队员A留下,则队员B必须回家休息下,或者B留下,A回家原创 2015-08-10 00:34:13 · 1171 阅读 · 0 评论 -
HDU - 3622 Bomb Game(二分+2-SAT)
题目大意:玩一个放炸弹游戏,有N次放炸弹的机会,每次放炸弹时,你都有两个位置可以选择,问如何放炸弹,能使爆炸的炸弹的半径的最小值最大(炸弹爆炸半径可以控制,但是爆炸形成的圈不能有重叠部分)解题思路:最小值最大,二分 二分半径,如果有不满足的点,就建立起限制边,接着判断能否完成染色即可#include <cstdio>#include <cstring>#include <algorithm>原创 2015-08-10 00:38:58 · 1009 阅读 · 0 评论 -
LightOJ - 1407 Explosion(2-SAT)
题目大意:有N个人,M种条件,K个限制 条件如下 1 x y:x或y至少一个要到 2 x y:x到的话,y可以随意。x不到的话,y也不到。(隐藏条件,y到的话,x必须得到) 3 x y:x或y至少一个缺席 4 x y:x或y其中一个要到,但不能同时到限制如下 1 x y z:至少一个要到 2 x y z:至少一个不能到解题思路:2-SAT判断的时候,多加一个判断,判断限制是否符合即可#原创 2015-11-01 13:27:32 · 714 阅读 · 0 评论