博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【UVA11294】Wedding (2-SAT)
阅读量:5303 次
发布时间:2019-06-14

本文共 1223 字,大约阅读时间需要 4 分钟。

题意:

  有N-1对夫妻参加一个婚宴,所有人都坐在一个长长的餐桌左侧或者右侧,新郎和新娘面做面坐在桌子的两侧。由于新娘的头饰很复杂,她无法看到和她坐在同一侧餐桌的人,只能看到对面餐桌的人。任意一对夫妻不能坐在桌子的同侧,另外有m对人吵过架,而新娘不希望看到两个吵过架的人坐在他的对面,问如何安排这些座位。

 

分析:

  考虑新娘对面那一边,吵过架的不能坐在一起。两夫妻中只能选一个而且必须选一个坐在新娘对面,但不能选两个吵过架的人。所以我们可以用人物关系建图,然后用2-SAT求解。

  另外,说一下2-SAT的不回溯算法,是在图对称的时候才保证正确性的。所以记得保证图是对称的哦。

 

 

代码如下:

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 #define Maxn 2010 8 #define Maxm 1000010 9 10 int n,m;11 int first[Maxn];12 bool mark[Maxn];13 int s[Maxn],sl;14 15 struct node16 {17 int x,y,next;18 }t[Maxm];int len;19 20 void ins(int x,int y)21 {22 t[++len].x=x;t[len].y=y;23 t[len].next=first[x];first[x]=len;24 }25 26 bool dfs(int x)27 {28 if(mark[x^1]) return 0;29 if(mark[x]) return 1;30 mark[x]=1;31 s[++sl]=x;32 for(int i=first[x];i;i=t[i].next)33 {34 if(!dfs(t[i].y)) return 0;35 }36 return 1;37 }38 39 bool ffind()40 {41 memset(mark,0,sizeof(mark));42 mark[0]=1;43 if(!dfs(0)) return 0;44 for(int i=1;i
[uva11294]

 

2016-03-24 13:24:20

转载于:https://www.cnblogs.com/Konjakmoyu/p/5315122.html

你可能感兴趣的文章
jquery-jqzoom 插件 用例
查看>>
1007. Maximum Subsequence Sum (25)
查看>>
iframe的父子层跨域 用了百度的postMessage()方法
查看>>
图片生成缩略图
查看>>
动态规划 例子与复杂度
查看>>
查看oracle数据库的连接数以及用户
查看>>
【数据结构】栈结构操作示例
查看>>
中建项目环境迁移说明
查看>>
三.野指针和free
查看>>
activemq5.14+zookeeper3.4.9实现高可用
查看>>
TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议
查看>>
简单【用户输入验证】
查看>>
python tkinter GUI绘制,以及点击更新显示图片
查看>>
HDU4405--Aeroplane chess(概率dp)
查看>>
CS0103: The name ‘Scripts’ does not exist in the current context解决方法
查看>>
20130330java基础学习笔记-语句_for循环嵌套练习2
查看>>
Spring面试题
查看>>
窥视SP2010--第一章节--SP2010开发者路线图
查看>>
MVC,MVP 和 MVVM 的图示,区别
查看>>
C语言栈的实现
查看>>