中文题 题意略

学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妻子  的两条边即可

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

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 typedef pair<int, int> PI;
 5 #define INF 0x3f3f3f3f
 6
 7 const int N=1005*2;
 8 const int M=N*N;
 9 //注意n是拆点后的大小 即 n <<= 1 N为点数(注意要翻倍) M为边数 i&1=0为i真 i&1=1为i假
10 struct Edge
11 {
12     int to, nex;
13 }edge[M];
14 //注意 N M 要修改
15 int head[N], edgenum;
16 void addedge(int u, int v)
17 {
18     Edge E={v, head[u]};
19     edge[edgenum]=E;
20     head[u]=edgenum++;
21 }
22
23 bool mark[N];
24 int Stack[N], top;
25 void init()
26 {
27     memset(head, -1, sizeof(head));
28     edgenum=0;
29     memset(mark, 0, sizeof(mark));
30 }
31
32 bool dfs(int x)
33 {
34     if(mark[x^1])
35         return false;//一定是拆点的点先判断
36     if(mark[x])
37         return true;
38     mark[x]=true;
39     Stack[top++]=x;
40     for(int i=head[x];i!=-1;i=edge[i].nex)
41         if(!dfs(edge[i].to))
42             return false;
43
44     return true;
45 }
46
47 bool solve(int n)
48 {
49     for(int i=0;i<n;i+=2)
50         if(!mark[i] && !mark[i^1])
51         {
52             top=0;
53             if(!dfs(i))
54             {
55                 while(top)
56                     mark[Stack[--top]]=false;
57                 if(!dfs(i^1))
58                     return false;
59             }
60         }
61     return true;
62 }
63
64 int main()
65 {
66     int n;
67     while(~scanf("%d", &n))
68     {
69         int m;
70         scanf("%d", &m);
71         init();
72         while(m--)
73         {
74             int a1, a2, c1, c2;
75             scanf("%d%d%d%d", &a1, &a2, &c1, &c2);
76             addedge(2*a1+c1, 2*a2-c2+1);
77             addedge(2*a2+c2, 2*a1-c1+1);
78         }
79         solve(n)? puts("YES"): puts("NO");
80     }
81     return 0;
82 }

HDOJ 3062

转载于:https://www.cnblogs.com/Empress/p/4737520.html

[2-sat]HDOJ3062 Party相关推荐

  1. 模板 - 2 - SAT问题

    整理的算法模板合集: ACM模板 注意一个坑,2SAT问题中如果要求你输出方案,如果你的代码输出的跟样例不一样,不要着急,因为2SAT 问题本来就是有多解,结果我样例不过,交上去就A了 方案输出时,c ...

  2. 计算机学院 图论方向,成电计算机学院本科生在计算机科学理论方向重要国际会议SAT上发表论文...

    近日,计算机科学与工程学院(网络空间安全学院)2017级本科生和肖鸣宇教授撰写的论文"A Fast Algorithm for SAT in Terms of Formula Length& ...

  3. MIT录取不再看SAT科目成绩:曾是华裔传统优势,数学等学科测验更是中国留学生强项...

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 美国麻省理工学院今天在招生网站上宣布,决定不再考虑将SAT科目考试作为录取过程的一部分. 这一决定从2020~2021学年开始生效. SA ...

  4. 欧文分校计算机新sat多少分录取,加州大学欧文分校SAT成绩要求是多少?

    加州大学欧文分校对于SAT成绩的要求是多少?现在申请美国本科,很多都是需要同学们提供sat成绩的额,下面托普仕留学老师为大家介绍SAT多少分才能申请加州大学欧文分校?同学们在申请之前要多注意院校信息. ...

  5. 欧文分校计算机新sat多少分录取,加州大学欧文分校SAT成绩要求

    下面为大家介绍的是加州大学欧文分校University of California Irvine的SAT成绩要求.加州大学欧文分校University of California Irvine是美国加 ...

  6. 如何使用SAP事务码SAT进行UI应用的性能分析

    Sent: Wednesday, July 11, 2012 7:49 PM Subject: [Knowledge share]How to trace UI transaction using S ...

  7. 使用SAT跟踪监控从浏览器打开的SAP应用的性能和调用栈

    今天是农历鼠年大年初四,本文是鼠年第4篇文章,也是汪子熙公众号第203篇原创文章. 大家这几天在家里宅得如何了?貌似不少朋友都闷坏了. 我们继续学习. Jerry之前的文章 SAP错误消息调试之七种武 ...

  8. 使用ABAP SAT工具分析SAP OData service实现明细

    Created by Wang, Jerry, last modified on Mar 26, 2015 使用SAT运行OData service测试report: 直接运行report: 确保OD ...

  9. 使用SAT研究IBASE hierarchy读取性能

    Created by Jerry Wang on Mar 06, 2014 1. transaction code SAT,创建一个新的variant例如ZJERRY, 确保Aggregation为N ...

  10. 如何使用SAT trace一个正在运行的程序

    Created by Jerry Wang, last modified on Jul 17, 2014 在SAT tcode中维护需要使用的SAT variant,在这个例子里为ZJERRY.在ta ...

最新文章

  1. 英语单词 voltage simulation synthesize junction asynchronous mega optimize
  2. 2013年完美世界校园招聘笔试题
  3. 基于事件驱动架构构建微服务第7部分:在仓储上实现事件溯源
  4. apache.camel_Apache Camel 2.16发布–十大亮点
  5. java使用AntPathMatcher进行uri匹配
  6. webform计算某几列结果_WebForm获取checkbox选中的值(几个简单的示例)
  7. 计算机网络学习笔记(16. 计算机网络与Internet发展历史)
  8. JDBC14 ORM03 JavaBean封装
  9. 黄老师架构师课程笔记(一)反射
  10. 检验成果的软指标与硬指标
  11. Mac OS系统下kernel_task占用大量CPU资源导致系统卡顿
  12. 英语在线听力翻译器_英语听力翻译app下载-英语听力翻译软件下载v1.1.3 安卓版-2265安卓网...
  13. 讲教资备考时间和精力
  14. 卖出跨式套利与买入蝶式价差
  15. Opengl 之 窗口初体验 ------ By YDD的铁皮锅
  16. 格式化的硬盘能恢复吗 硬盘格式化以后能恢复吗
  17. 用C实现OOP面向对象编程(1)
  18. 微信小程序修改制作生成头像——校庆头像制作小程序
  19. 鼠标放上去,变成小手状
  20. 银河麒麟服务器操作系统设置网卡自启动

热门文章

  1. mysql 实例复制_MYSQL教程MySQL 复制详解及简单实例
  2. python读取扫描形成的pdf_Python利用PyPDF2库获取PDF文件总页码实例
  3. Confluence 6 在 Apache 或者系统级别阻止垃圾
  4. MongoDB的基本shell操作(三)
  5. 内存数据库和关系数据库之间的数据同步原理
  6. 《那些年啊,那些事——一个程序员的奋斗史》——79
  7. 三星+android7.0+字体,三星S7升级安卓7.0新技能:新增分辨率调整功能
  8. Android 倒计时——Timer和CountDownTimer的使用,实现启动,暂停,继续,重复,重设时长以及启动service后台倒计时
  9. android activity调用Adapter方法刷新列表UI,RecyclerView.Adapter
  10. js处理富文本编辑器转义、去除转义、去除HTML标签