hdu 3062
2-SAT的入门题;
网上说这个算法最好的入门教材是:伍昱的《由对称性解2-SAT问题》的ppt和赵爽的论文《2-SAT 解法浅析》;
看了一下伍昱的ppt,很好理解!
而这道题相对ppt里面的例子来说更加简单;
代码:
#include<cstdio>
#include<stack>
#include<vector>
#include<algorithm>
#include<cstring>
#define maxn 2010
using namespace std; vector<int>ve[maxn];
stack<int>s;
int low[maxn],dfn[maxn],b[maxn],nncount,cnt;
bool instack[maxn]; void tarjin(int u)
{
low[u]=dfn[u]=++nncount;
s.push(u);
instack[u]=;
int l=ve[u].size();
for(int i=;i<l;i++)
{
int v=ve[u][i];
if(!dfn[v])
{
tarjin(v);
low[u]=min(low[u],low[v]);
}
else if(instack[v])
low[u]=min(low[u],dfn[v]);
}
if(low[u]==dfn[u])
{
cnt++;
int v;
do
{
v=s.top();
s.pop();
b[v]=cnt;
instack[v]=;
}while(v!=u);
}
} int main()
{
int n,m,x,y,u,v;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=;i<*n;i++)
ve[i].clear();
memset(low,,sizeof low);
memset(dfn,,sizeof dfn);
memset(b,,sizeof b);
nncount=cnt=;
for(int i=;i<m;i++)
{
scanf("%d%d%d%d",&x,&y,&u,&v);
ve[(x<<)+u].push_back((y<<|)-v);
ve[(y<<)+v].push_back((x<<|)-u);
}
bool flag=;
for(int i=;i<*n;i++)
if(!dfn[i]) tarjin(i);
for(int i=;i<n;i++)
if(b[i<<]==b[i<<|]) {flag=;break;}
if(flag) puts("NO");
else puts("YES");
}
return ;
}
hdu 3062的更多相关文章
- 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 ...
- 图论(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缩点,然后进行判断 ...
随机推荐
- Java基础知识强化之IO流笔记60:打印流 之 改进复制文本文件的案例
1. 使用打印流改进复制文本文件的案例 2. 代码示例: package cn.itcast_03; import java.io.BufferedReader; import java.io.Buf ...
- Android_Intent_passValueForResult
当SecondActivity需要回传参数时:1. MainActivity启动SecondActivity时需要调用startActivityForResult() 并定义请求码2. SecondA ...
- javascript进击(七)Ajax
AJAX AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的编程语言,而是一种使用现有标准的新方法. AJA ...
- JUnit4 笔记
1. JUnit4基础 JUnit4 与 JUnit3不同的是,不需要继承测试类,而是通过JDK5提供的注解去标识测试方法. 常用的注解如下: @Before:初始化方法 对于每一个测试方法都要执行一 ...
- hibernate篇章二--成就搭建hibernate框架
在网上的资料很多,但是成功搭建一个Hibernate框架的很少,下面我将用一个简单的例子成功搭建一个Hibernate框架给大伙瞧瞧 该链接中有源代码和数据库,例子很简单,只是往数据库中的person ...
- 取caml查询结果的前多少行
取查询结果的前多少行的方法?spQuery.RowLimit = 1; SPList list = SPContext.Current.Web.Lists[ListNames. ...
- android 中在CMD中查看sqlite
今天第一次学习Sqlite,在代码中执行了sql,但是不知道在上面地方才能直观的查看sqlite中的数据,下面是查看资料后的找到的查看方法: 通过上述可以从cmd进入数据库查看原文地址:http:// ...
- 20160402javaweb 开发模式
开发案例: 首先,我们确定用xml文件代替数据库,便于测试 建立web工程,基本架构见下图 代码如下: 首先是javabean:User.java package com.dzq.domian; im ...
- 20160329javaweb之JSP -session入门
3.Session Session 是一个域 !!作用范围:当前会话范围 !!生命周期: 当程序第一次调用到request.getSession()方法时说明客户端明确的需要用到session此时创建 ...
- linux修改主机名(hostname)转载
Linux修改主机名的方法 用hostname命令可以临时修改机器名,但机器重新启动之后就会恢复原来的值. #hostname //查看机器名#hostname -i //查看本机器名对应的ip ...