POJ 3648 2-sat
题目大意:
有一对新人结婚,邀请n对夫妇去参加婚礼。
有一张很长的桌子,人只能坐在桌子的两边,还要满
足下面的要求:1.每对夫妇不能坐在同一侧 2.n对夫妇
之中可能有通奸关系(包括男男,男女,女女),有通
奸关系的不能同时坐在新娘的对面,可以分开坐,可以
同时坐在新娘这一侧。如果存在一种可行的方案,输出
与新娘同侧的人。 这里因为输入的是字符串,要注意的是数字可能不只是一个个位数,要
while(isdigit(s1[index1])) i = i*10+(s1[index1++]-'0');
while(isdigit(s2[index2])) j = j*10+(s2[index2++]-'0');
这里自己一直没找到原因,错了很多次
其他的就按照 2i 表示 i 号丈夫坐在新娘对面,2i+1 表示i 号妻子坐在新娘对面
初始将新郎对应的编号的标记设为true , 因为他必然坐在新娘对面
这样找下来,最后标记为false的便是坐在新娘这边的
#include <cstdio>
#include <cstring>
#include <vector>
#include <ctype.h>
#include <algorithm>
using namespace std;
#define N 300
int n , m , S[N] , c ;
bool mark[N];
char s1[] , s2[];
vector<int> G[N]; void init()
{
memset(mark , , sizeof(mark));
for(int i= ; i<n* ; i++) G[i].clear();
} bool dfs(int u)
{
if(mark[u]) return true;
if(mark[u^]) return false;
mark[u] = true;
S[c++] = u;
for(int i= ; i<G[u].size() ; i++)
if(!dfs(G[u][i])) return false;
return true;
} bool solve()
{
mark[] = true;//一定是坐在新娘对面,所以新郎为true
for(int i= ; i<*n ; i+=){
if(!mark[i] && !mark[i^]){
c = ;
if(!dfs(i)){
while(c) mark[S[--c]] = false;
if(!dfs(i^)) return false;
}
}
}
return true;
} void add_clause(int i , int p , int j , int q)
{
int m = *i+p , n = *j+q;
G[m].push_back(n^);
G[n].push_back(m^);
} int main()
{
// freopen("in.txt" , "r" , stdin);
while(scanf("%d%d" , &n , &m) , n+m)
{
init();
while(m--){
scanf("%s%s" , s1 , s2);
int i , j , p , q;
i = , j = ;
int index1 = , index2 = ;
while(isdigit(s1[index1])) i = i*+(s1[index1++]-'');
while(isdigit(s2[index2])) j = j*+(s2[index2++]-'');
p = s1[index1]=='h'?: , q = s2[index2]=='h'?:;
add_clause(i , p , j ,q);
}
if(!solve()) puts("bad luck");
else{
int flag = ;
for(int i= ; i<n* ; i++){
if(!mark[i]){
if(flag) printf(" %d%c" , i/ , i&?'w':'h');
else printf("%d%c" , i/ , i&?'w':'h');
flag=;
}
}
puts("");
}
}
return ;
}
POJ 3648 2-sat的更多相关文章
- POJ 3648 Wedding(2-SAT的模型运用+DFS | Tarjan)
Wedding Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10427 Accepted: 3170 Specia ...
- poj 3648 Wedding 2-SAT问题入门题目
Description Up to thirty couples will attend a wedding feast, at which they will be seated on either ...
- poj 3648 2-SAT问题
思路:将每对夫妻看成是对立状态,每个不正常关系都是一个矛盾,按2-SAT的方式建边.最后建一条新娘到新郎的边.具体看注释 #include<iostream> #include<cs ...
- POJ 3648 Wedding (2-SAT,经典)
题意:新郎和新娘结婚,来了n-1对夫妻,这些夫妻包括新郎之间有通奸关系(包括男女,男男,女女),我们的目地是为了满足新娘,新娘对面不能坐着一对夫妻,也不能坐着有任何通奸关系的人,另外新郎一定要坐新娘对 ...
- poj 1687 Buggy Sat 简单计算几何
暑期集训出的第一道一血 感觉自己萌萌哒…… 这道题本身并没有坑点 仅仅是翻译巨坑…… 解大腿在做B 安学长在做E 我闲着也没事 就一个词一个词翻译F…… 最后感觉…… 题干大多数都看不懂…… 也都没啥 ...
- POJ 3648 Wedding
2-SAT,直接选择新娘一侧的比较难做,所以处理的时候选择新郎一侧的,最后反着输出就可以. A和B通奸的话,就建边 A->B'以及B->A’,表示 A在新郎一侧的话,B一定不在:B在新郎一 ...
- poj 3648 2-SAT建图+topsort输出结果
其实2-SAT类型题目的类型比较明确,基本模型差不多是对于n组对称的点,通过给出的限制条件建图连边,然后通过缩点和判断冲突来解决问题.要注意的是在topsort输出结果的时候,缩点后建图需要反向连边, ...
- POJ.3648.Wedding(2-SAT)
题目链接 题意看这吧..https://www.cnblogs.com/wenruo/p/5885948.html \(Solution\) 每对夫妇只能有一个坐在新娘这一边,这正符合2-SAT初始状 ...
- POJ - 3648 Wedding (2-SAT 输出解决方案)
题意:有N-1对夫妇和1对新郎新娘要出席婚礼,这N对人要坐在走廊两侧.要求每对夫妇要坐在不同侧.有M对人有通奸关系,对于这一对人,不能同时坐在新娘对面(新娘新郎也可能和别人有通奸关系).求如何避免冲突 ...
随机推荐
- hdu 4965 Fast Matrix Calculation
题目链接:hdu 4965,题目大意:给你一个 n*k 的矩阵 A 和一个 k*n 的矩阵 B,定义矩阵 C= A*B,然后矩阵 M= C^(n*n),矩阵中一切元素皆 mod 6,最后求出 M 中所 ...
- hdu 1573 X问题
数论题,本想用中国剩余定理,可是取模的数之间不一定互质,用不了,看到网上有篇文章写得很好的:数论——中国剩余定理(互质与非互质),主要是采用合并方程的思想: 大致理解并参考他的代码后便去试试hdu上这 ...
- pdmreader支持读取xml格式的pdm文件,无法读取二进制格式的pdm文件。
您的Pdm数据字典文件可能不被PDMReader读取,可能是因为pdm文件版本的问题.但 您可以通过PowerDesigner12(下载PowerDesigner12)进行转换 后进行读取. 您要做的 ...
- 配置Linux任务计划
Linux有三种计划任务: at:指定一个时间执行一个任务 (适用一个或多个任务,执行一次后就不用) cron:根据一个时间表自动执行任务 (使用一个或多个任务,周期性执行) 系统级别的计划任务及其扩 ...
- c++程序编码
c++程序中涉及到中文字符的输入输出以及其他操作经常会出现乱码.乱码主要是由于程序的源文件编码.可执行文件编码以及程序运行环境的编码不匹配导致.比如,c++源程序文件编码为GB18030, 在源程序中 ...
- php中mysql数据库异步查询实现
问题 通常一个web应用的性能瓶颈在数据库.因为,通常情况下php中mysql查询是串行的.也就是说,如果指定两条sql语句时,第二条sql语句会等到第一条sql语句执行完毕再去执行.这个时候,如果执 ...
- easyui 上传文件代码
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.IO;usi ...
- OneProxy wiki上线了
文档的敏捷开发方式,希望把文档做好. http://www.onexsoft.com/dokuwiki/doku.php?id=oneproxy
- 打开Eclipse时出现"The Eclipse executable launcher was unable to locate its companion shared library"情况的解决办法
在网上有坑,各种解决方法都有,但似乎我这台64位机器不太给面子,都不能解决: 结果自己找到了解决办法,总结了一下,大多数软件出问题,如果卸载了重新装还是出现问题,一般都是注册表残留的问题: 将ecli ...
- HTML5 game engines
The following are few examples of game engines implemented with HTML5 and JavaScript: Construct 2: O ...