2-SAT(HDU-3062 party)
2-SAT(HDU-3062 party)
解决问题类型:
书本定义:给一个布尔方程,判断是否存在一组解使整个方程为真,被称为布尔方程可满足性问题(SAT)
因为本题只有0,1(丈夫 妻子只能去一个人),所以是2-SAT。
算法思想:
根据题意:对于(a ,a' )(b ,b' ),如果a ,b 构成仇恨问题,那么a 若出席,b' 一定出席,b若出席,a ‘ 一定出席;据此他们之间可以建有向边(有向边的意义一定要明白! ! !代码中建边时已经标注)。而强连通分量的特点就是可以缩点,判断两点之间是否可以相互到到达(对此图tarjan缩点,若一对夫妻在一个强连通分量中,表示这对夫妻之间有一条逻辑上的有向边)
可能脑子太迟钝了,好不容易悟出来,不过还是很开心
可能因为学了数据结构,觉得邻接表就是单链表的头插法,有木有!!!
撸代码:
#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std;
struct node
{
int v,nex;
} edge[1000007];
int dfn[2007],low[2007],instack[2007],head[2007],index;
int cir,belong[2007],cnt;
stack<int>s;
void init()
{
for(int i=0; i<=2005; i++)
{
head[i]=-1;
dfn[i]=0;
low[i]=0;
instack[i]=0;
belong[i]=0;
}
while(!s.empty())
s.pop();
cir=0;
index=0;
cnt=0;
}
void add_edge(int u,int v)
{
edge[cnt].v=v;
edge[cnt].nex=head[u];
head[u]=cnt++;
}/*邻接表相当于链表的头插法*/
void Tarjan(int u)
{
instack[u]=1;
s.push(u);
dfn[u]=low[u]=++index;
for(int i=head[u]; i!=-1; i=edge[i].nex)
{
int v=edge[i].v;
if(!dfn[v])
{
Tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(instack[v])
{
low[u]=min(low[u],dfn[v]);
}
}
if(low[u]==dfn[u])
{
++cir;
int node;
do
{
node=s.top();
s.pop();
instack[node]=0;
belong[node]=cir;
}
while(node!=u);
}
return ;
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
init();
int a,b,c,d;
for(int i=1; i<=m; i++)
{
scanf("%d%d%d%d",&a,&b,&c,&d);
a=(a<<1)+c;
b=(b<<1)+d;/*a b 不能在一块*/
add_edge(a,b^1);
add_edge(b,a^1);
/*!!! 为什么没有a^1和b^1:有向边意义:若选a必选b^1,b同理*/
}
for(int i=0; i<n*2; i++)
if(!dfn[i])
Tarjan(i);
int flag=0;
for(int i=0; i<n; i++)
{
if(belong[i<<1]==belong[(i<<1)^1])/*!!!若某0 1点在一个连通分量,说明两个都要选,自相矛盾*/
flag=1;
}
if(flag)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}
DREAM_yao:若有错误,热烈欢迎指正
2-SAT(HDU-3062 party)的更多相关文章
- HDU 3062 && HDU 1824 && POJ 3678 && BZOJ 1997 2-SAT
一条边<u,v>表示u选那么v一定被选. #include <iostream> #include <cstring> #include <cstdio> ...
- hdu 3062 Party 2-SAT
题目链接:HDU - 3062 有n对夫妻被邀请参加一个聚会,因为场地的问题,每对夫妻中只有1人可以列席.在2n 个人中,某些人之间有着很大的矛盾(当然夫妻之间是没有矛盾的),有矛盾的2个人是不会同时 ...
- hdu 3062 2-sat入门题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3062 #include <cstdio> #include <cmath> # ...
- hdu 3062+1824(2-sat入门)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3062 思路:根据矛盾关系连边(如果a与b矛盾,则连边a'->b,b'->a),然后强连通缩 ...
- HDU 3062:Party(2-SAT入门)
http://acm.hdu.edu.cn/showproblem.php?pid=3062 题意:中文. 思路:裸的2-SAT.判断二元组的两个人是否在同一个强连通分量. 学习地址:http://w ...
- HDU 3062 Party
Party Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdu 3062 2-SAT问题
思路:裸的2-SAT. #include<map> #include<set> #include<cmath> #include<queue> #inc ...
- hdu 3062
2-SAT的入门题: 网上说这个算法最好的入门教材是:伍昱的<由对称性解2-SAT问题>的ppt和赵爽的论文<2-SAT 解法浅析>: 看了一下伍昱的ppt,很好理解! 而这道 ...
- 图论(2-sat):HDU 3062 Party
Party Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdu 3062 2-Sat入门
开始学习2-Sat,前面看了对称性解决2-sat的ppt,很有帮助. 题意:n对夫妻,夫妻需要出席一人,给出不相容的关系,求每对是否能完成出席方案. 思路:通过关系建图,Tarjan缩点,然后进行判断 ...
随机推荐
- c#版阿里云oss上传——基于layui、pupload的oss 后端web端直传的vue组件
废话前言 去年,做项目用到oss上传,度娘上逛了一圈写了个前后端代码结合的c#版oss上传. 今年又要用到oss上传时发现很难复用,复用改动的范围太大,显然这个轮子不合格.于是想了下,花了一天的时间( ...
- Reids(4)——神奇的HyperLoglog解决统计问题
一.HyperLogLog 简介 HyperLogLog 是最早由 Flajolet 及其同事在 2007 年提出的一种 估算基数的近似最优算法.但跟原版论文不同的是,好像很多书包括 Redis 作者 ...
- 基于abp框架的数据库种子数据初始化
目录 基于abp框架的数据库种子数据初始化 1.背景 2.参照 3.解决方案 3.1 初始化数据 3.2 依赖注入方法容器里获取数据库上下文 3.3 封装创建初始化数据列表方法 3.4 数据库中没有的 ...
- 前端基础知识之HTML
[1: What does a doctype do?] 1: doctype是html文件的第一行代码,意味着它的前面有注释都不行.所以要要写在<html>标签前面,而且它不属于html ...
- 使用nestjs集成grpc具体操作
两个程序中, 提供grpc服务的称为服务端, 调用grpc服务的为客户端, 以下是grpc服务端和客户端的代码编写 1. 创建两个nestjs项目demo1(端口: 3000)和demo2(端 ...
- 从0开始搭建kafka客户端
上一节,我们实现了搭建kafka集群.本节我们将从0开始,使用Java,搭建kafka客户端生产消费模型. 1.创建maven项目2.kafka producer3.kafka consumer4.结 ...
- 峰哥说技术:02-第一个Spring Boot应用程序
Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 02第一个Spring Boot应用程序 1.版本要求 集成开发环境:IntelliJ IDEA 2017 ...
- Delphi XE XML信息的读取
<?xml version=""?> <ConString> <Item> <Name/> <Type>C</Ty ...
- 05 JPAUtil工具类
public final class JPAUtil { // JPA的实体管理器工厂:相当于Hibernate的SessionFactory private static EntityManager ...
- xadmin theme
我在user的adminx中设置了为True之后,我的主题还是加载不出来,具体没找到原因,网上也没有找到相应的资料,不过通过尝试,可以根据需要,添加自己需要的主题,操作如下: 1.找到xadmin文件 ...