【 HDU - 3062】Party(2-sat)

题干:

有n对夫妻被邀请参加一个聚会,因为场地的问题,每对夫妻中只有1人可以列席。在2n 个人中,某些人之间有着很大的矛盾(当然夫妻之间是没有矛盾的),有矛盾的2个人是不会同时出现在聚会上的。有没有可能会有n 个人同时列席?

Input

n: 表示有n对夫妻被邀请 (n<= 1000) 
m: 表示有m 对矛盾关系 ( m < (n - 1) * (n -1)) 

在接下来的m行中,每行会有4个数字,分别是 A1,A2,C1,C2 
A1,A2分别表示是夫妻的编号 
C1,C2 表示是妻子还是丈夫 ,0表示妻子 ,1是丈夫 
夫妻编号从 0 到 n -1 

Output

如果存在一种情况 则输出YES 
否则输出 NO 

Sample Input

2 
1
0 1 1 1 

Sample Output

YES

解题报告:

   直接2-sat裸题。因为题干中说一对夫妻有且只有一个人参加聚会,所以符合元素和元素的非 的性质。所以如果说A和B有仇,那就A->b , B -> a这样就好。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define F first
#define S second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 3000 + 5;
struct Edge {int v,ne;
} e[5000005]; 
int n,m;
int head[MAX],tot;//1~n代表妻子,n+1到2*n代表丈夫 
void add(int u,int v) {e[++tot].v = v;e[tot].ne = head[u];head[u] = tot;
}
int DFN[MAX],LOW[MAX],col[MAX],vis[MAX],index,stk[MAX],scc,clk;
void Tarjan(int x) {DFN[x] = LOW[x] = ++clk;vis[x] = 1;stk[++index] = x;for(int i = head[x]; ~i; i = e[i].ne) {int v = e[i].v;if(!DFN[v]) {Tarjan(v);LOW[x] = min(LOW[x],LOW[v]);}else if(vis[v]) LOW[x] = min(LOW[x],DFN[v]);}if(LOW[x] == DFN[x]) {scc++;while(1) {int tmp = stk[index--];col[tmp] = scc;vis[tmp] = 0;if(tmp == x) break;}}
}
void init(int n) {tot=0;clk=index=scc=0;for(int i = 1; i<=2*n; i++) head[i] = -1,DFN[i]=LOW[i]=vis[i]=col[i]=0;
}
int main()
{while(~scanf("%d%d",&n,&m)) {init(n);for(int c1,c2,a1,a2,i = 1; i<=m; i++) {scanf("%d%d%d%d",&a1,&a2,&c1,&c2);a1++,a2++;int U = a1 + c1*n,u=a1+(1-c1)*n;int V = a2 + c2*n,v=a2+(1-c2)*n;add(U,v);add(V,u); }for(int i = 1; i<=2*n; i++) {if(!DFN[i]) Tarjan(i);}int flag = 1;for(int i = 1; i<=n; i++) {if(col[i] == col[i+n]) {flag = 0;break;}}if(flag) puts("YES");else puts("NO");}return 0 ;
}
//20:10-20:39

总结:

当然对于这一题还有另一种建图方式:链接

对于这道题,我们首先要虚拟节点,对于编号为i的妻子a和丈夫b,做法如下: (我用!来表示非,毕竟那些符号不好办)

对妻子a: 对应的a虚拟为 节点 i ,对应的!a虚拟为节点 i + 2*N, 
对丈夫b: 对应的b虚拟为节点i + N ,!b虚拟为节点 i + N + 2*N。 这样的话我们得到了4*N -1个节点。

由题意有以下建边方案

一:夫妻a,b只能去一人且必须去一人。 得布尔表达式 (!a -> b)合取(!b -> a)合取(b -> !a)合取(a -> !b)

二:有矛盾的两人不能同时去,这就意味着可能都不去。 得布尔表达式 (a -> !b)合取(b -> !a)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微博API接入初识【cxn专用】

微博API官方文档 本文介绍 本文环境成为微博开发者通过鉴权获取单条微博内容 环境 WindowsPython 3.8.10sinaweibopy3-1.3 &#xff08;pip3 install sinaweibopy3&#xff09;requests 成为微博开发者 微博官方新手教程 &#xff08;cxn可以跳过&#xff0c;用博主的即可…

一步步编写操作系统3 部署工作环境 3

盗梦空间般的开发环境&#xff0c;虚拟机中再装个虚拟机。 很多同学电脑的系统都是windows&#xff0c;个别的是mac os,还有的同学用的是linux。做为一名Linux粉丝&#xff0c;我的开发环境必然建立在Linux平台下。那对于其它系统的用户&#xff0c;你们可以自己部署相应平台的…

Apollo进阶课程⑩ | Apollo地图采集方案

目录 TomTom的高精地图和RoadDNA APOLLO地图采集流程 基站搭建 Apollo地图采集硬件方案 地图数据服务平台 原文链接&#xff1a;进阶课程⑩ | Apollo地图采集方案 上周阿波君为大家详细介绍了「Apollo进阶课程⑨业界的高精地图产品」。 出现在课程中的业界制作高精地图的厂…

【HDU - 2665】Kth number(区间第K大,主席树,模板)

题干&#xff1a; Give you a sequence and ask you the kth big number of a inteval. Input The first line is the number of the test cases. For each test case, the first line contain two integer n and m (n, m < 100000), indicates the number of integers …

一步步编写操作系统4 安装x86虚拟机 bochs

Bochs下载安装 在完成了linux发行版的安装后&#xff0c;现在到了安装bochs的环节&#xff0c;这是我们的操作系统最终的宿主机。 由于我的工作是运维&#xff0c;所以练就了任何软件包都要从源码安装的“陋习”&#xff0c;从来不信任任何软件包。因为只有从源码安装的版本才…

用Python写Shell

环境 ubuntu: 18.04python: 3.6.9xnosh: 0.11.0 下载 pip3 install xonsh 简单使用 # 开启xonsh xonsh # 下载小工具&#xff08;也可不下&#xff09;:高亮提示、智能补全 xpip install -U xonsh[full]# 随便下载一个包 pip3 install moneyimport money m1 money.Money(…

Apollo进阶课程⑪ | Apollo地图生产技术

目录 高精地图生产流程 数据采集 数据处理 元素识别 人工验证 全自动数据融合加工 基于深度学习的地图要素识别 人工验证生产 地图成果 原文链接&#xff1a;进阶课程⑪ | Apollo地图生产技术 高精地图是自动驾驶汽车的「千里眼」和「透视镜」。 摄像头、激光雷达、传…

一步步编写操作系统 5 配置bochs

配置bochs 安装完成后该配置bochs了&#xff0c;它是通过配置文件完成的。要说这个配置文件&#xff0c;它有点类似bios。我们在开机时按下的del、或者esc、或者F2键&#xff0c;各个机型进入bios方式有所不同&#xff0c;但差不多就那几种方式。Bios中会显示各种硬件的信息&a…

【HDU - 4417】Super Mario(查询区间小于K的数的个数,主席树)

题干&#xff1a; Mario is world-famous plumber. His “burly” figure and amazing jumping ability reminded in our memory. Now the poor princess is in trouble again and Mario needs to save his lover. We regard the road to the boss’s castle as a line (the l…

Jenkins初识

Jenkins是啥 官方文档 Jenkins是一款开源 CI&CD 软件&#xff0c;用于自动化各种任务&#xff0c;包括构建、测试和部署软件。 Jenkins 支持各种运行方式&#xff0c;可通过系统包、Docker 或者通过一个独立的 Java 程序。CI(Continuous integration&#xff0c;持续集成…

Apollo进阶课程 ⑫ | Apollo高精地图

目录 Apollo高精地图表征元素 Apollo车道模型 UTM坐标系 84坐标系 Track坐标系 Apollo opDRIVE规范 HDMAP引擎 高精地图在政策方面的挑战 原文链接&#xff1a;进阶课程 ⑫ | Apollo高精地图 高精地图与普通地图不同&#xff0c;高精地图主要服务于自动驾驶车辆&#…

一步步编写操作系统 6 启动bochs

运行bochs 终于安装完成了&#xff0c;虽然这过程中有可能会出现各种各样的问题&#xff0c;但还是值得庆祝的&#xff0c;对Linux不熟的朋友第一次就搞定了这么个硬货&#xff0c;我理解您此时的喜大普奔之情&#xff0c;哈哈&#xff0c;给大家点赞。顺便说一句&#xff0c;…

Apollo技能图谱2.0焕新发布 更新7大能力91个知识点

阿波君 Apollo开发者社区 2月26日 过去的一年里&#xff0c;Apollo发展迅速&#xff0c;向智能交通不断渗透。从2.5到3.5版本&#xff0c;无论控制系统的升级、高清地图的泛用和车路协同技术服务的推进&#xff0c;无不在推动自动驾驶技术从开源向开辟商业化新格局位移。 在开…

【HDU - 4348】To the moon(主席树,区间更新)

题干&#xff1a; Background To The Moon is a independent game released in November 2011, it is a role-playing adventure game powered by RPG Maker. The premise of To The Moon is based around a technology that allows us to permanently reconstruct the memo…

一步步编写操作系统 07 开机启动bios

bios是如何苏醒的 bios其实一直睡在某个地方&#xff0c;直到被唤醒……前面热火朝天的说了bios的功能和内存布局&#xff0c;似乎还没说到正题上&#xff0c;bios是如何启动的呢。因为bios是计算机上第一个运行的软件&#xff0c;所以它不可能自己加载自己&#xff0c;由此可…

0.《沉浸式线性代数》:前言

今天介绍一本新书《immersive linear algebra》&#xff1a;世界上第一本具有完全交互式图形的线性代数书。本书目前已经更新完毕。 作者是&#xff1a;JacobStrm&#xff0c;Kallestrm和Tomas Akenine-Mller&#xff0c;全文共包含11个部分&#xff1a;前言和10个正文章节。内…

【2019牛客暑期多校训练营(第二场) - D】Kth Minimum Clique(bfs,tricks)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/882/D 来源&#xff1a;牛客网 Given a vertex-weighted graph with N vertices, find out the K-th minimum weighted clique. A subset of vertices of an undirected graph is called clique if …

Apollo进阶课程 ⑬ | Apollo无人车自定位技术入门

目录 1.什么是无人车自定位系统 2.为什么无人车需要精确的定位系统 2.1 激光定位 2.2 视觉定位 2.3 惯性导航 2.4 多传感器融合定位 原文链接&#xff1a;进阶课程 ⑬ | Apollo无人车自定位技术入门 上周阿波君为大家详细介绍了「Apollo进阶课程⑫丨Apollo地图生产技术」…

一步步编写操作系统 08 bios跳转到神奇的内存地址0x7c00

为什么是0x7c00 计算机执行到这份上&#xff0c;bios也即将完成自己的历史使命了&#xff0c;完成之后&#xff0c;它又将睡去。想到这里&#xff0c;心中不免一丝忧伤&#xff0c;甚至有些许挽留它的想法。可是&#xff0c;这就是它的命&#xff0c;它生来被设计成这样&…

【2019牛客暑期多校训练营(第二场) - H】Second Large Rectangle(单调栈,全1子矩阵变形)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/882/H 来源&#xff1a;牛客网 题目描述 Given a NMN \times MNM binary matrix. Please output the size of second large rectangle containing all "1"\texttt{"1"}"1…