题目大意:一张长桌,n对夫妻,编号为0~n,这些人要坐在长桌两侧,每对夫妻不能坐在同一侧。其中,有2*m个人相互讨厌,编号为0的夫妻中的妻子不愿意让对面那一侧中有两个相互吵过架的人,找一种排座位方案。

题目分析:2-SAT问题。如果两个人吵过架,那就一定不能在同一侧,满足“只能取一个”的模型。不过如果dfs(0)失败,就意味着没有解决方案,如果继续dfs(1),那么找到的方案是“丈夫不愿意看到两个吵过架的人”的排位方案,而不是“妻子”(设2*i表示夫妻中的妻子,2*i+1表示夫妻中的丈夫)。

代码如下:

# include<iostream>
# include<cstdio>
# include<vector>
# include<cstring>
# include<algorithm>
using namespace std; const int maxn=35;
vector<int>G[2*maxn];
int mark[2*maxn],S[2*maxn],cnt,n,m;
char p[2][3]; void add(int x,int xval,int y,int yval)
{
x=x*2+xval;
y=y*2+yval;
G[x^1].push_back(y);
G[y^1].push_back(x);
} bool dfs(int u)
{
if(mark[u^1]) return false;
if(mark[u]) return true;
mark[u]=1;
S[cnt++]=u;
for(int i=0;i<G[u].size();++i)
if(!dfs(G[u][i]))
return false;
return true;
} bool judge()
{
for(int i=0;i<2*n;i+=2){
if(!mark[i]&&!mark[i+1]){
cnt=0;
if(!dfs(i)){
if(i==0) return false;///当新娘在某一侧无解的时候,直接返回false,否则找到的是和新郎同侧的人;
while(cnt>0) mark[S[--cnt]]=0;
if(!dfs(i+1)) return false;
}
}
}
return true;
} int main()
{
int a,b;
while(scanf("%d%d",&n,&m)&&(n+m))
{
for(int i=0;i<2*n;++i) G[i].clear();
memset(mark,0,sizeof(mark));
while(m--)
{
scanf("%d%s%d%s",&a,p[0],&b,p[1]);
int u=0,v=0;
if(p[0][0]=='h') u=1;
if(p[1][0]=='h') v=1;
add(a,u,b,v);
}
if(!judge())
printf("bad luck\n");
else{ for(int i=1;i<n;++i)
printf("%d%c%c",i,mark[i<<1]?'w':'h',(i==n-1)?'\n':' ');
}
}
return 0;
}

  

最新文章

  1. zookeeper的安装(图文详解。。。来点击哦!)
  2. c# winform 窗体起始位置 设置
  3. web压测工具http_load原理分析
  4. 【LAMP】在Debian系linux下安装LAMP
  5. 哈希-Gold Balanced Lineup 分类: POJ 哈希 2015-08-07 09:04 2人阅读 评论(0) 收藏
  6. python编程语言缩进格式
  7. zoj 3537 Cake 区间DP (好题)
  8. ecshop数据库表结构
  9. 两个iframe之间传值
  10. [hadoop]Cannot create directory /mdrill/tablelist/fact_seller_all_d. Name node is in safe mode.
  11. 数据可视化-使用EXCEL和PS制作一个复杂饼图
  12. React,关于redux的一点小见解
  13. 利用js实现禁用浏览器后退
  14. 微信企业号C#开发配置API
  15. strace命令,read,write
  16. [IDE] ECLIPSE取消自动更新
  17. 谈谈XAML前端开发
  18. 转:xxe attack学习
  19. python 面向对象(进阶篇)转载武沛齐
  20. 【动态规划去除冗余】NOIP2010-乌龟棋

热门文章

  1. 手把手教 GitHub + Hexo 搭建博客
  2. JQuery可以轻松实现数字框
  3. [笔记]Win10下编译Tesseract-OCR 4.0
  4. 【1】Kali Linux的安装及配置
  5. get请求参数为中文,参数到后台出现乱码(注:乱码情况千奇百怪,这里贴我遇到的情况)
  6. go channel 阻塞
  7. python计算纪念日相关
  8. 20145312 实验五《Java网络编程》
  9. Duilib + wke 设置wke背景透明
  10. C#开发自己的Web服务器