当前位置:网站首页>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
边栏推荐
- Creative mode 1 - single case mode
- 证明 poj 1014 模优化修剪,部分递归 有错误
- LabVIEW打开PNG 图像正常而 Photoshop打开得到全黑的图像
- One article deals with the microstructure and instructions of class
- Finally understand what dynamic planning is
- 3D reconstruction of point cloud
- Practice of concurrent search
- 98. 验证二叉搜索树 ●●
- Multi sensor fusion of imu/ optical mouse / wheel encoder (nonlinear Kalman filter)
- 视频标准二三事
猜你喜欢
Finally understand what dynamic planning is
Three.js-01 入门
东南亚电商指南,卖家如何布局东南亚市场?
Development specification: interface unified return value format [resend]
Element operation and element waiting in Web Automation
Yiwen gets rid of the garbage collector
Common JVM tools and optimization strategies
Selenium+Pytest自动化测试框架实战
Expectation, variance and covariance
Three.JS VR看房
随机推荐
3D reconstruction of point cloud
The method and principle of viewing the last modification time of the web page
Common static methods of math class
Idea rundashboard window configuration
Using LNMP to build WordPress sites
asp.net弹出层实例
如何快速理解复杂业务,系统思考问题?
实现反向代理客户端IP透传
February 13, 2022 -5- maximum depth of binary tree
Calculating the number of daffodils in C language
The PNG image is normal when LabVIEW is opened, and the full black image is obtained when Photoshop is opened
How to quickly understand complex businesses and systematically think about problems?
2022 registration examination for safety management personnel of hazardous chemical business units and simulated reexamination examination for safety management personnel of hazardous chemical busines
(4) UART application design and simulation verification 2 - TX module design (stateless machine)
Matlab smooth curve connection scatter diagram
Go language implementation principle -- map implementation principle
(4)UART应用设计及仿真验证2 —— TX模块设计(无状态机)
Go language implementation principle -- lock implementation principle
Go语言实现原理——锁实现原理
Registration of Electrical Engineering (elementary) examination in 2022 and the latest analysis of Electrical Engineering (elementary)