题意:

Party

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 4035 Accepted Submission(s): 1300


Problem Description
有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

思路:

     基础的2sat,不会的建议看根据对称性解析2sat的那个, 把夫妻看成基础对,排斥的两个人看成排斥对,直接建边就行了,缩点我用的是双深搜的强连通。

#include<stdio.h>
#include<string.h>
#include<stack> #define N_node 2000 + 10
#define N_edge 2000000 + 100

using namespace
std; typedef struct
{
int
to ,next;
}
STAR; STAR E1[N_edge] ,E2[N_edge];
int
list1[N_node] ,list2[N_node] ,tot;
int
mark[N_node] ,Belong[N_node] ,cnt;
stack<int>st; void add(int a ,int b)
{

E1[++tot].to = b;
E1[tot].next = list1[a];
list1[a] = tot; E2[tot].to = a;
E2[tot].next = list2[b];
list2[b] = tot;
} void
DFS1(int s)
{

mark[s] = 1;
for(int
k = list1[s] ;k ;k = E1[k].next)
{
int
xin = E1[k].to;
if(!
mark[xin])
{

mark[xin] = 1;
DFS1(xin);
}
}

st.push(s);
} void
DFS2(int s)
{

mark[s] = 1;
Belong[s] = cnt;
for(int
k = list2[s] ;k ;k = E2[k].next)
{
int
xin = E2[k].to;
if(!
mark[xin])
{

mark[xin] = 1;
DFS2(xin);
}
}
} int main ()
{
int
n ,m ,i ,a ,b ,c ,d;
while(~
scanf("%d %d" ,&n ,&m))
{

memset(list1 ,0 ,sizeof(list1));
memset(list2 ,0 ,sizeof(list2));
tot = 1;
for(
i = 1 ;i <= m ;i ++)
{

scanf("%d %d %d %d" ,&a ,&b ,&c ,&d);
a = a * 2 + c,b = b * 2 + d;
add(a ,b^1) ,add(b ,a^1);
}
while(!
st.empty()) st.pop();
memset(mark ,0 ,sizeof(mark));
for(
i = 1 ;i <= n * 2 - 1 ;i ++)
if(!
mark[i])DFS1(i);
memset(mark ,0 ,sizeof(mark));
cnt = 0;
while(!
st.empty())
{
int
xin = st.top();
st.pop();
if(!
mark[xin])
{
++
cnt;
DFS2(xin);
}
}
int
mk = 0;
for(
i = 0 ;i < n ;i += 2)
{
if(
Belong[i] == Belong[i^1])
mk = 1;
}
if(
mk)puts("NO");
else
puts("YES");
}
return
0;
}


hdu 3062 基础的2sat的更多相关文章

  1. HDU 3062 Party(2-SAT模版题)

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

  2. HDU 3062 简单的2-SAT问题

    在2-SAT,最让我纠结的还是添加有向线段的函数了 void add_clause(int i,int a,int j,int b){    int m=2*i+a;    int n=2*j+b;  ...

  3. HDU 3062 Party ( 2-sat tarjan)

    Party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  4. HDU 3062 Party 裸 2-sat

    #include <iostream> #include <cstdio> #include <cstring> using namespace std; cons ...

  5. hdu 3062 Party 2-SAT

    题目链接:HDU - 3062 有n对夫妻被邀请参加一个聚会,因为场地的问题,每对夫妻中只有1人可以列席.在2n 个人中,某些人之间有着很大的矛盾(当然夫妻之间是没有矛盾的),有矛盾的2个人是不会同时 ...

  6. HDU 3062 && HDU 1824 && POJ 3678 && BZOJ 1997 2-SAT

    一条边<u,v>表示u选那么v一定被选. #include <iostream> #include <cstring> #include <cstdio> ...

  7. HDU 2509 基础Anti-SG NIM

    如果我们规定当局面中所有的单一游戏的SG值为0时,游戏结束,则先手必胜当且仅当:(1)游戏的SG!=0 && 存在单一游戏的SG>1:(2)游戏的SG==0  && ...

  8. HDU 3537 基础翻硬币模型 Mock Turtles 向NIM转化

    翻硬币游戏,任意选3个,最右边的一个必须是正面.不能操作者败. 基本模型..不太可能自己推 还是老实记下来吧..对于单个硬币的SG值为2x或2x+1,当该硬币的位置x,其二进制1的个数为偶数时,sg= ...

  9. HDU 2188 基础bash博弈

    基础的bash博弈,两人捐钱,每次不超过m,谁先捐到n谁胜. 对于一个初始值n,如果其不为(m+1)的倍数,那么先手把余数拿掉,后继游戏中不管如何,后手操作后必定会有数余下,那么先手必胜,反之后手必胜 ...

随机推荐

  1. 如何在Bash脚本中引入alias

    更多精彩内容,请关注微信公众号:后端技术小屋 alias的使用 在日常开发中,为了提高运维效率,我们会用alias(命令别名)来定义命令的简称.比如在~/.bash_profile中添加: alias ...

  2. 07-Spring ConfigurationClassPostProcessor

    ConfigurationClassPostProcessor 功能 此类是一个后置处理器类,主要功能是参与 BeanFactory 中 BeanDefinition 的操作和 BeanDefinit ...

  3. windbg安装pykd记录

    https://githomelab.ru/pykd/pykd 1.安装python   (坑,分x86和x64,对应windbg版本) 2.安装pykd:'pip install pykd' 3.安 ...

  4. 面试题:ApplicationContext和BeanFactory两种容器区别

    ApplicationContext和BeanFactory两种容器区别 BeanFactory是ApplicationContext容器的父接口 BeanFactory(多例模式): BeanFac ...

  5. Python3基础之构建setup.py

    技术背景 在上一篇博客中,我们介绍了如何使用pyinstaller将python项目打包成一个可执行文件,并且放在系统目录下,让系统用户可以直接识别到我们构造的项目.而python项目中常见的setu ...

  6. DAOS 分布式异步对象存储|存储模型

    概述 DAOS Pool 是分布在 Target 集合上的存储资源预留.分配给每个 Target 上的 Pool 的实际空间称为 Pool Shard. 分配给 Pool 的总空间在创建时确定,后期可 ...

  7. Kotlin编写Processing程序(使用函数式编程思维和面向接口方式)

    写一例Kotlin编写的Processing程序,充分调用函数式编程思维和面向接口的编程思维,供自己和读者参考学习. 初衷 想要实现一行行的文字排版功能,每一行作为一个单位,可制定显示的位置.大小.文 ...

  8. 201871010113-贾荣娟 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 18级卓越班 这个作业要求链接 实验三-软件工程结对项目 这个课程学习目标 掌握软件开发流程,提高自身能力 这个作业在哪些方面帮助我实现了学习目标 本次实验让我对软件工程 ...

  9. Dynamics Crm Plugin插件注册的问题及解决方案(持续更新。。。。。。)

    1.注册插件的时候回遇到如下提示 Plug-in assembly does not contain the required types or assembly content cannot be ...

  10. 北航OO第三单元作业总结(3.1~3.3)

    JML简介及相关工具链使用 1.JML规格描述语言介绍 本单元学习的内容是JML规格描述语言.我们知道,面向对象方法是一个抽象过程,需求者仅需关注方法的规格.规格是对一个方法/类/程序的外部可感知行为 ...