当前位置:网站首页>UVA11294-Wedding(2-SAT)
UVA11294-Wedding(2-SAT)
2022-07-05 23:20:00 【Full stack programmer webmaster】
Hello everyone , I meet you again , I'm the king of the whole stack
The question : Yes n The couple attended a wedding banquet .
Everyone sits on the left or right of a long table . All couples can only sit face to face , Including the bride and groom . The bride can only see people sitting on different sides of her . Yes m It's more than a fight for people , The bride doesn't want to see them sitting on the same side .
Ask if there is a distribution plan to meet the bride's requirements .
Ideas :2-SAT problem . If each couple is a variable xi. If xi by true when , The wife and the bride sit on the same side ;xi by false when , The husband and the bride sit on the same side . When xi and xj When you are both husband , It needs to meet ~xi V ~xj, It means that at most one of the two husbands is sitting on a different side from the bride ; When xi and xj When both are wives . It needs to meet xi V xj. It means that at most only one of the two wives is sitting on a different side from the bride . When xi and xj When opposite sex , It needs to meet ~xi V xj perhaps xi V ~xj One of them . It means that at most one of the two is sitting on a different side from the bride .
in summary . Is to satisfy the husband ~xi, Wife xi. Finally, pay attention to initialization mark[1] = 1.
Code :
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
const int MAXN = 1005;
struct TwoSAT{
int n;
vector<int> g[MAXN * 2];
bool mark[MAXN * 2];
int s[MAXN * 2], c;
bool dfs(int x) {
if (mark[x^1]) return false;
if (mark[x]) return true;
mark[x] = true;
s[c++] = x;
for (int i = 0; i < g[x].size(); i++)
if (!dfs(g[x][i])) return false;
return true;
}
void init(int n) {
this->n = n;
for (int i = 0; i < n * 2; i++)
g[i].clear();
memset(mark, 0, sizeof(mark));
mark[1] = 1;
}
void add_clause(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 solve() {
for (int i = 0; i < n * 2; i += 2)
if (!mark[i] && !mark[i + 1]) {
c = 0;
if (!dfs(i)) {
while (c > 0) mark[s[--c]] = false;
if (!dfs(i + 1)) return false;
}
}
return true;
}
};
TwoSAT solver;
int n, m;
int main() {
while (scanf("%d%d", &n, &m)) {
if (n == 0 && m == 0)
break;
solver.init(n);
char a, b;
int xval, yval, u, v;
while (m--) {
scanf("%d%c%d%c", &u, &a, &v, &b);
xval = (a == 'h') ? 0 : 1; yval = (b == 'h') ? 0 : 1; solver.add_clause(u, xval, v, yval); } if (!solver.solve()) printf("bad luck\n"); else { for (int i = 1; i < n; i++) { printf("%d%c", i, solver.mark[2*i] ? 'h' : 'w'); if (i == n - 1) printf("\n"); else printf(" "); } } } return 0;}
Copyright notice : This article is an original blog article , Blog , Without consent , Shall not be reproduced .
Publisher : Full stack programmer stack length , Reprint please indicate the source :https://javaforall.cn/117543.html Link to the original text :https://javaforall.cn
边栏推荐
- Comparison between webgl and webgpu [3] - vertex buffer
- LeetCode——Add Binary
- Code farmers to improve productivity
- Douban scoring applet Part-2
- 利用LNMP实现wordpress站点搭建
- Common static methods of math class
- Multi camera stereo calibration
- Matlab smooth curve connection scatter diagram
- 11gR2 Database Services for &quot;Policy&quot; and &quot;Administrator&quot; Managed Databases (文件 I
- Using LNMP to build WordPress sites
猜你喜欢
Creative mode 1 - single case mode
第十七周作业
Fix the memory structure of JVM in one article
Hainan Nuanshen tea recruits warmhearted people: recruitment of the product experience recommender of Nuanshen multi bubble honey orchid single cluster
February 13, 2022-4-symmetric binary tree
数学公式截图识别神器Mathpix无限使用教程
Douban scoring applet Part-2
3:第一章:认识JVM规范2:JVM规范,简介;
14种神笔记方法,只需选择1招,让你的学习和工作效率提高100倍!
Non rigid / flexible point cloud ICP registration
随机推荐
Solution to the packaging problem of asyncsocket long connecting rod
(4)UART應用設計及仿真驗證2 —— TX模塊設計(無狀態機)
Use of shell:for loop
Yiwen gets rid of the garbage collector
判断二叉树是否为完全二叉树
MySQL (2) -- simple query, conditional query
LeetCode——Add Binary
Finally understand what dynamic planning is
TVS管 与 稳压二极管参数对比
Hj16 shopping list
Scala concurrent programming (II) akka
Leecode learning notes
Debian 10 installation configuration
视频标准二三事
The method and principle of viewing the last modification time of the web page
The PNG image is normal when LabVIEW is opened, and the full black image is obtained when Photoshop is opened
Go语言实现原理——Map实现原理
poj 2762 Going from u to v or from v to u? (infer whether it is a weak link diagram)
二叉树递归套路总结
Thoroughly understand JVM class loading subsystem