ZOJ 3656 Bit Magic (2-Sat问题)
来源:互联网 发布:手机数据钱接线图 编辑:程序博客网 时间:2024/06/10 21:10
题意:b[i][j] 与a[i], a[j]的关系如下。现在已知b,问是否存在对应的a,若存在输出YES,否则输出NO
void calculate(int a[N], int b[N][N]) {for (int i = 0; i < N; ++i) {for (int j = 0; j < N; ++j) {if (i == j) b[i][j] = 0;else if (i % 2 == 1 && j % 2 == 1) b[i][j] = a[i] | a[j];else if (i % 2 == 0 && j % 2 == 0) b[i][j] = a[i] & a[j];else b[i][j] = a[i] ^ a[j];}}}
题解:
#include<cstring>#include<algorithm>#include <cstdio>using namespace std;#define MAXN 1010int n;unsigned int b[510][510];int m[1010][1010];int id[1010];int find_components(int n,int mat[][MAXN],int* id){int ret=0,a[MAXN],b[MAXN],c[MAXN],d[MAXN],i,j,k,t;for (k=0;k<n;id[k++]=0);for (k=0;k<n;k++)if (!id[k]){for (i=0;i<n;i++)a[i]=b[i]=c[i]=d[i]=0;a[k]=b[k]=1;for (t=1;t;)for (t=i=0;i<n;i++){if (a[i]&&!c[i])for (c[i]=t=1,j=0;j<n;j++)if (mat[i][j]&&!a[j])a[j]=1;if (b[i]&&!d[i])for (d[i]=t=1,j=0;j<n;j++)if (mat[j][i]&&!b[j])b[j]=1;}for (ret++,i=0;i<n;i++)if (a[i]&b[i])id[i]=ret;}return ret;}void build_map(int k){ memset(m, 0, sizeof(m)); for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) { if(i == j) continue; if(i % 2 == 1 && j % 2 == 1) { if(b[i][j] & (1<<k)) { m[i][j+n] = 1; m[j][i+n] = 1; } else { m[i+n][i] = 1; m[j+n][j] = 1; } } else if(i % 2 == 0 && j % 2 == 0) { if(b[i][j] & (1<<k)) { m[i][i+n] = 1; m[j][j+n] = 1; } else { m[j+n][i] = 1; m[i+n][j] = 1; } } else { if(b[i][j] & (1<<k) ) { m[i][j+n] = m[j+n][i] = 1; m[j][i+n] = m[i+n][j] = 1; } else { m[i][j] = m[j][i] = 1; m[i+n][j+n] = m[j+n][i+n] = 1; } } }}void solve(){ for(int k = 0; k < 32; k++) { build_map(k); memset(id, 0, sizeof(id)); find_components(2*n, m, id); for(int i = 0; i < n; i++) if(id[i] == id[i+n]) { printf("NO\n"); return; } } printf("YES\n");}int main(){while(scanf("%d",&n) != EOF) { int i, j; memset(id, 0, sizeof(id)); memset(b, 0, sizeof(b)); for(i = 0; i < n; i++) for(j = 0; j < n; j++) scanf("%d",&b[i][j]); bool flag = true; for(i = 0; i < n; i++) if(b[i][i]) { flag = false; break; } if(flag == false) { printf("NO\n"); continue; } solve(); }return 0;}
- ZOJ 3656 Bit Magic (2-Sat问题)
- ZOJ 3656 Bit Magic(2-sat)
- ZOJ 3656 Bit Magic (2-SAT判断)
- ACM->2-sat ZOJ 3656 Bit Magic
- ZOJ 3656 Bit Magic 2-SAT
- ZOJ 3656 Bit Magic (2-SAT)
- zoj 3656 Bit Magic【2-sat】【2012 长春现场赛】
- ZOJ 3656 - Bit Magic 拆分成多个2-sat来判断...
- ZOJ 3656 Bit Magic (2-sat 可行性判定)
- ZOJ 3656 Bit Magic(长春现场赛B题,2-SAT)
- ZOJ 3656 Bit Magic
- zoj 3656 bit magic
- HDU4421 Bit Magic 【2-sat】
- hdu4421 Bit Magic 2-sat
- hdu 4421 && zoj 3656 Bit Magic 2-sat题找规律水过 也可以用并查集
- HDU 4421 & ZOJ 3556 Bit Magic(2-SAT 位运算 模板题)
- hdu4421&zoj3656 Bit Magic(2SAT)
- hdu 4421 Bit Magic(2-SAT)
- 胜者树与败者树
- wireshark从命令行启动
- JFreeChart中文API
- java 求二叉树中节点的最大距离.
- 2012-10-14 11gR2 concepts page 193 - 215
- ZOJ 3656 Bit Magic (2-Sat问题)
- 【云计算之数据中心】基本概念和术语
- ZOJ 3656 Bit Magic
- hook
- Web前端开发体会十日谈
- 日常电脑软件推荐清单
- 就业任务之二关注技术
- 趣味逻辑推理
- 建立json数据库笔记