中文题 题意略

学2-sat啦啦啦

2-sat就是    矛盾的 ($x、x’$不能同时取) m对人 相互也有限制条件 取出其中n个人

也有可能是把一件东西分成 取/不取 相矛盾的两种情况 (那就要拆点啦~) 取其中n件

做法是 暴力 和 强连通 两种

重点在于建图:

对于x,记 取 为 $x$, 不取 为$x’$

对于y,记 取 为 $y$,  不取 为$y’$

对于 一对矛盾u($u、u'$) 和 一对矛盾v($v、v'$) 建立$u\Rightarrow v$的含义是 取$u$ 则 必须取$v$

那么对于事件“x、y不能同时选” 需要建立两条边: $x\Rightarrow y'$(取$x$ 则必定 取$y’$,也就是不取$y$) 、 $y\Rightarrow x'$(取$y$ 则必定 取$x’$,也就是不取$x$)

“x、y不能同时不选”                     $x'\Rightarrow y$(取$x’$,也就是不取$x$ 则必须取$y$) 、 $y’\Rightarrow x$(取$y’$,也就是不取$y$ 则必须取$x$)

“x、y要同时选”                           $x\Rightarrow y$(取$x$ 则 必须取$y$)

“x、y要同时不选”                        $x’\Rightarrow y’$(取$x’$ 则 必须取$y’$)

还有个比较特殊的: “x必须选”

         这个建边的方法(类似于反证法)是 建立不能取x'的边

         $x'\Rightarrow x$

         结合边的含义来看:上述边的意义是:取x’(不取x) 则必须取x

           显然这是矛盾的, 那么对于取x’ 这个方案是不行的,也就是必须取x

           呃(-。-;)这个有点绕。。。    就是  不取x是不行的 那就是取x咯

         在算法运行的过程中 一旦出现矛盾 比如上述的取x'(不取x) 又要取x的情况 那么就可以开始回溯了 这个方案是行不通的

噢 回到这道题

这道题 丈夫和妻子不能同时出席 就是x和x’ 了

比如案例0号丈夫和1号丈夫不能同时选

那就建  0丈夫$\Rightarrow$ 1妻子  、 1丈夫$\Rightarrow$ 0妻子  的两条边即可

然后套个九爷的模板啦啦啦就好啦

 #include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int> PI;
#define INF 0x3f3f3f3f const int N=*;
const int M=N*N;
//注意n是拆点后的大小 即 n <<= 1 N为点数(注意要翻倍) M为边数 i&1=0为i真 i&1=1为i假
struct Edge
{
int to, nex;
}edge[M];
//注意 N M 要修改
int head[N], edgenum;
void addedge(int u, int v)
{
Edge E={v, head[u]};
edge[edgenum]=E;
head[u]=edgenum++;
} bool mark[N];
int Stack[N], top;
void init()
{
memset(head, -, sizeof(head));
edgenum=;
memset(mark, , sizeof(mark));
} bool dfs(int x)
{
if(mark[x^])
return false;//一定是拆点的点先判断
if(mark[x])
return true;
mark[x]=true;
Stack[top++]=x;
for(int i=head[x];i!=-;i=edge[i].nex)
if(!dfs(edge[i].to))
return false; return true;
} bool solve(int n)
{
for(int i=;i<n;i+=)
if(!mark[i] && !mark[i^])
{
top=;
if(!dfs(i))
{
while(top)
mark[Stack[--top]]=false;
if(!dfs(i^))
return false;
}
}
return true;
} int main()
{
int n;
while(~scanf("%d", &n))
{
int m;
scanf("%d", &m);
init();
while(m--)
{
int a1, a2, c1, c2;
scanf("%d%d%d%d", &a1, &a2, &c1, &c2);
addedge(*a1+c1, *a2-c2+);
addedge(*a2+c2, *a1-c1+);
}
solve(n)? puts("YES"): puts("NO");
}
return ;
}

HDOJ 3062

[2-sat]HDOJ3062 Party的更多相关文章

  1. 多边形碰撞 -- SAT方法

    检测凸多边形碰撞的一种简单的方法是SAT(Separating Axis Theorem),即分离轴定理. 原理:将多边形投影到一条向量上,看这两个多边形的投影是否重叠.如果不重叠,则认为这两个多边形 ...

  2. POJ 3678 Katu Puzzle(2 - SAT) - from lanshui_Yang

    Description Katu Puzzle is presented as a directed graph G(V, E) with each edge e(a, b) labeled by a ...

  3. Map Labeler POJ - 2296(2 - sat 具体关系建边)

    题意: 给出n个点  让求这n个点所能建成的正方形的最大边长,要求不覆盖,且这n个点在正方形上或下边的中点位置 解析: 当然是二分,但建图就有点还行..比较难想..行吧...我太垃圾... 2 - s ...

  4. 学习笔记(two sat)

    关于two sat算法 两篇很好的论文由对称性解2-SAT问题(伍昱), 赵爽 2-sat解法浅析(pdf). 一些题目的题解 poj 3207 poj 3678 poj 3683 poj 3648 ...

  5. LA 3211 飞机调度(2—SAT)

    https://vjudge.net/problem/UVALive-3211 题意: 有n架飞机需要着陆,每架飞机都可以选择“早着陆”和“晚着陆”两种方式之一,且必须选择一种,第i架飞机的早着陆时间 ...

  6. HIT 1917 2—SAT

    题目大意:一国有n个党派,每个党派在议会中都有2个代表, 现要组建和平委员会,要从每个党派在议会的代表中选出1人,一共n人组成和平委员会. 已知有一些代表之间存在仇恨,也就是说他们不能同时被选为和平委 ...

  7. 2 - sat 模板(自用)

    2-sat一个变量两种状态符合条件的状态建边找强连通,两两成立1 - n 为第一状态(n + 1) - (n + n) 为第二状态 例题模板 链接一  POJ 3207 Ikki's Story IV ...

  8. SAT考试里最难的数学题? · 三只猫的温暖

    问题 今天无意中在Quora上看到有人贴出来一道号称是SAT里最难的一道数学题,一下子勾起了我的兴趣.于是拿起笔来写写画画,花了差不多十五分钟搞定.觉得有点意思,决定把解题过程记下来.原帖的图太小,我 ...

  9. 世界碰撞算法原理和总结(sat gjk)

    序言 此文出于作者的想法,从各处文章和论文中,总结和设计项目中碰撞结构处理方法.如有其它见解,可以跟作者商讨.(杨子剑,zijian_yang@yeah.net). 在一个世界中,有多个物体,物体可以 ...

随机推荐

  1. 使用inotify检测linux目录内文件变化

    #include <unistd.h> #include <sys/inotify.h> #include <stdio.h> #include <error ...

  2. ADO.NET笔记——使用连接池

    相关知识: 连接池的意义: 应用程序往往涉及大量的,并发的数据访问操作 数据库服务器能够同时维系的连接数量非常有限.如果某个数据库访问操作不及时关闭连接,就会减少其他调用对数据库访问的机会.因此,一般 ...

  3. Java应用短信猫

    首先确定短信猫正常连接到主机,并安装SIM卡.先用超级终端测试短息猫能不能用.安装minicom:#sudo apt-get install minicom安装完成后,执行#sudo minicom ...

  4. 【全面解析DeepZoom 之三】建立DeepZoom应用

    文章出处:http://www.cnblogs.com/zhouyinhui/archive/2008/04/14/1153371.html (周银辉) 与导出整图不一样,你不能这样使用: <M ...

  5. 例题6-7 Trees on the level ,Uva122

    本题考查点有以下几个: 对数据输入的熟练掌握 二叉树的建立 二叉树的宽度优先遍历 首先,特别提一下第一点,整个题目有相当一部分耗时在了第一个考查点上(虽然有些不必要,因为本应该有更简单的方法).这道题 ...

  6. MAC上 nodejs express 安装

    最近在MAC上搭建 nodejs环境以及安装 express 框架,遇到了一些问题,不过最后总算还是安装成功了,下面是操作步骤 1.node js 安装 访问nodejs官网进入下载mac上的安装包 ...

  7. dedecms 处理分页样式及去掉分页li

    最近装了个织梦dedecmsV5.7版本时,调用分页显示出现的结果出现好几行,怎么也不能在一排显示,找了很多资料,才了解到是由织梦模板中分页加了<Li>列表标签,解决有两种方法,下面将一一 ...

  8. jqueryGrid 内置的onclickSubmit afterSubmit

    $(document).ready(function() { $('#jpgCustomers').jqGrid({ //url from wich data should be requested ...

  9. SqlServer ,storedprocedure操作

    USE [Role] GO /*Create a table*/ IF OBJECT_ID ('dbo.Users', 'U') IS NOT NULL DROP TABLE Users GO CRE ...

  10. eclipse安装pydev插件

    打开Eclipse,找到Help菜单栏,进入Install New Software…选项. 点击work with:输入框的旁边点击Add…,Name可以随便输入,Location是http://p ...