hdu-1814(2-sat)
题意:给你n个组,m条规则,每组有俩个人,这两个人不能同时出现,然后m条规则代表着有两个人,这两个人也不能同时出现,问你是否存在每组都能出现一人的选择方案
解题思路:因为这个需要字典序输出,所以只能用暴力的方法解决,如果x,y在同一条规则里面,那么建立一条边由x指向和y同一组的另一个人,y也这样做,然后开始暴力dfs
代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<queue>
#include<vector>
#define oth(x) (x%2==0?x-1:x+1)
using namespace std;
const int maxn=20050;
int n,m,cnt;
bool mark[maxn];
vector<int>e[maxn];
int ans[maxn];
bool dfs(int x)
{
if(mark[oth(x)])
return false;
if(mark[x])
return true;
mark[x]=true;
ans[++cnt]=x;
for(int i=0;i<e[x].size();i++)
if(!dfs(e[x][i]))
return false;
return true;
}
bool twosat()
{
memset(mark,0,sizeof(mark));
for(int i=1;i<=n;i+=2)
{
if(!mark[i]&&!mark[oth(i)])
{
cnt=0;
if(!dfs(i))
{
for(int j=1;j<=cnt;j++)
mark[ans[j]]=mark[oth(ans[j])]=0;
if(!dfs(oth(i)))
return false;
}
}
}
return true;
}
int main()
{
int x,y;
while(scanf("%d%d",&n,&m)!=EOF)
{
n=n*2;
for(int i=0;i<=n;i++)
e[i].clear();
for(int i=1;i<=m;i++)
{
cin>>x>>y;
e[x].push_back(oth(y));
e[y].push_back(oth(x));
}
if(twosat())
{
for(int i=1;i<=n;i+=2)
{
if(mark[i])
printf("%d\n",i);
else
printf("%d\n",i+1);
}
}
else
printf("NIE\n");
}
}
hdu-1814(2-sat)的更多相关文章
- HDU 1814 Peaceful Commission / HIT 1917 Peaceful Commission /CJOJ 1288 和平委员会(2-sat模板题)
HDU 1814 Peaceful Commission / HIT 1917 Peaceful Commission /CJOJ 1288 和平委员会(2-sat模板题) Description T ...
- hdu 1814 2-sat 输出字典最小的和任意序列的 模板题
/* 思路:http://blog.csdn.net/string_yi/article/details/12686873 hdu 1814 输出字典序最小的2-sat */ #include< ...
- HDU 1814 Peaceful Commission(2-sat 模板题输出最小字典序解决方式)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1814 Problem Description The Public Peace Commission ...
- hdu 4115 (2—SAT)
题意:两个人石头剪刀布,一个人的出法已确定,另一个人的出法有一定约束,某两次要相同或者不同,问你第二个人能否全部都不失败. 思路:根据Bob出的情况,我们可以确定每次Alice有两种方案. R与P,S ...
- hdu 1814 Peaceful Commission (2-sat 输出字典序最小的路径)
Peaceful Commission Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- HDU 1814 Peaceful Commission
2-SAT,输出字典序最小的解,白书模板. //TwoSAT输出字典序最小的解的模板 //注意:0,1是一组,1,2是一组..... #include<cstdio> #include&l ...
- Peaceful Commission HDU - 1814(输出最小的一组解)
Description 根据宪法,Byteland民主共和国的公众和平委员会应该在国会中通过立法程序来创立. 不幸的是,由于某些党派代表之间的不和睦而使得这件事存在障碍. 此委员会必须满足下列条件: ...
- HDU 1814 模板题 2-sat
敲模板做的,不知道怎么就对了,注意一下建边即可··· 贴代码: #include<cstdio> #include<vector> using namespace std; # ...
- 2-sat HDU 1814
题解来自于:http://www.cnblogs.com/kuangbin/archive/2012/10/05/2712622.html 和平委员会 根据宪法,Byteland民主共和国的公众和平委 ...
- hdu 1814 字典序最小的2sat(暴力深搜)
题意: 题意就是最基础的2sat,关系只有矛盾关系,然后二选一,关键是这个题目是输出字典序最小的那组解. 思路: 输出字典序最小,用强连通那个实现不了(起码没看到有人实现),其实我 ...
随机推荐
- Windows安裝PHP環境
Windows安裝PHP環境的準備工作:httpd-2.2+php-5.4+mysql-5.5 第一步是安裝相對應的三個軟件,只要略懂一些英文單詞,安裝是沒有問題的,所以此處略過三個文件的安裝過程,直 ...
- 1-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(视频总揽和功能演示)
主要实现的功能 其它视频和资料稍候再补充上 我先写后面的文章 2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(安装数据库,数据库简单说明)
- SpringBoot如何使用拦截器
1.配置拦截器 @Configuration public class WebMvcConfigurer extends WebMvcConfigurerAdapter { @Override pub ...
- .netcore 堆栈调用方法小记
背景 上午临近午饭时,公司同事反馈验证码被攻击灌水.我们匆忙查询验证码明细,对已频繁出现的IP插入黑名单,但IP仍然隔断时间频繁变动,不得已之下只能先封禁对应公司id的验证码发送功能.年初时候,专门对 ...
- JAVA里自定义注解来进行数据验证
API开发中经常会遇到一些对请求数据进行验证的情况,这时候如果使用注解就有两个好处,一是验证逻辑和业务逻辑分离,代码清晰,二是验证逻辑可以轻松复用,只需要在要验证的地方加上注解就可以. Java提供了 ...
- ASP.Net Core2.1中的HttpClientFactory系列一:HttpClient的缺陷
引言: ASP.NET Core2.1 中出现了一个新的 HttpClientFactory 功能, 它有助于解决开发人员在使用 HttpClient 实例从其应用程序中访问外部 web 资源时可能遇 ...
- CONTINUE...?模拟分情况
CONTINUE...? DreamGrid has classmates numbered from to . Some of them are boys and the others are ...
- MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义
varchar与char的区别: 1).varchar与char的区别char是一种固定长度的类型,varchar则是一种可变长度的类型 尽可能的使用 varchar 代替 char ,因为首先变长 ...
- 使用C# HttpWebRequest进行多线程网页提交。Async httpclient/HttpWebRequest实现批量任务的发布及异步提交和超时取消
使用线程池并发处理request请求及错误重试,使用委托处理UI界面输出. http://www.cnblogs.com/Charltsing/p/httpwebrequest.html for (i ...
- python_超级基础
初识计算机 CPU 计算机的大脑.中央处理单元,主要负责数据运算及计算,是运算计算中心. 存储器 内存 临时存储数据,供CPU运算使用. 优点: 读取速度快. 缺点: 容量小,成本高,断电即消失. 硬 ...