2-SAT,不要所有位置全部建好边再判断,那样会MLE的。

正解是,每一位建好边,就进行一次2-SAT。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#include<algorithm>
using namespace std; const int maxn=+; int N;
int B[][]; stack<int>S;
vector<int>G[maxn];
vector<int>FG[maxn];
int Belong[maxn];
int flag[maxn];
int Block; void init()
{
for(int i=; i<maxn; i++) G[i].clear();
for(int i=; i<maxn; i++) FG[i].clear();
memset(Belong,,sizeof Belong);
memset(flag,,sizeof flag);
while(!S.empty()) S.pop();
Block=;
} void addEdge(int x,int y)
{
G[x].push_back(y);
FG[y].push_back(x);
} void dfs1(int now)
{
flag[now]=;
for(int i=; i<G[now].size(); i++)
if(!flag[G[now][i]])
dfs1(G[now][i]);
S.push(now);
} void dfs2(int now)
{
Belong[now]=Block;
for(int i=; i<FG[now].size(); i++)
if(!Belong[FG[now][i]])
dfs2(FG[now][i]);
} bool judge()
{
for(int i=; i<*N; i++) if(!flag[i]) dfs1(i);
while(!S.empty())
{
int Top=S.top();
S.pop();
if(!Belong[Top])
{
Block++;
dfs2(Top);
}
}
for(int i=; i<N; i++)
if(Belong[i]==Belong[i+N])
return ;
return ;
} int main()
{
while(~scanf("%d",&N))
{
for(int i=; i<N; i++)
for(int j=; j<N; j++)
scanf("%d",&B[i][j]);
int Base=;
int ans=;
for(int i=; i<N; i++) if(B[i][i]!=) ans=;
for(int i=; i<N; i++)
for(int j=; j<N; j++)
if(B[i][j]!=B[j][i])
ans=;
if(ans==)
{
printf("NO\n");
continue;
} for(int k=; k<; k++)
{
init();
for(int i=; i<N; i++)
{
for(int j=i+; j<N; j++)
{
int c=B[i][j]&(<<k); if(i%==&&j%==)
{
if(c)
{
addEdge(i+N,j);
addEdge(j+N,i);
}
else
{
addEdge(i,i+N);
addEdge(j,j+N);
}
}
else if(i%==&&j%==)
{
if(c)
{
addEdge(i+N,i);
addEdge(j+N,j);
}
else
{
addEdge(i,j+N);
addEdge(j,i+N);
}
}
else
{
if(c)
{
addEdge(i,j+N);
addEdge(j,i+N);
addEdge(i+N,j);
addEdge(j+N,i);
}
else
{
addEdge(i,j);
addEdge(j,i);
addEdge(i+N,j+N);
addEdge(j+N,i+N);
}
}
}
}
if(!judge())
{
ans=;
break;
}
}
if(ans) printf("YES\n");
else printf("NO\n");
}
return ;
}

HDU 4421 ZOJ 3656 Bit Magic的更多相关文章

  1. HDU 4421 Bit Magic(2-sat)

    HDU 4421 Bit Magic pid=4421" target="_blank" style="">题目链接 题意:就依据题目,给定b数 ...

  2. HDU - 2222,HDU - 2896,HDU - 3065,ZOJ - 3430 AC自动机求文本串和模式串信息(模板题)

    最近正在学AC自动机,按照惯例需要刷一套kuangbin的AC自动机专题巩固 在网上看过很多模板,感觉kuangbin大神的模板最为简洁,于是就选择了用kuangbin大神的模板. AC自动机其实就是 ...

  3. HDU 4421 Bit Magic(奇葩式解法)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4421 题目大意: 给了你一段代码, 用一个数组的数 对其进行那段代码的处理,是可以得到一个矩阵 让你判 ...

  4. HDU 4421 Bit Magic (图论-2SAT)

    Bit Magic Problem Description Yesterday, my teacher taught me about bit operators: and (&), or ( ...

  5. 图论(2-sat):HDU 4421 Bit Magic

    Bit Magic Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  6. hdu 4421 Bit Magic

    [题意] 这个函数是给A求B的,现在给你B,问你是否能有A的解存在. [2-SAT解法] 对于每个A[i]的每一位运行2-sat算法,只要跑到强连通就可以结束,应为只要判断是否有解,后面拓扑求解就不需 ...

  7. 【转载】图论 500题——主要为hdu/poj/zoj

    转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  8. hdu 4424 & zoj 3659 Conquer a New Region (并查集 + 贪心)

    Conquer a New Region Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...

  9. hdu 4421(枚举+2-sat)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4421 思路:枚举32位bit,然后2-sat判断可行性,这里给出2-sat矛盾关系构图: 1.a&am ...

随机推荐

  1. Eclipse的WorkingSet使用(转载)

    Eclipse作为一款流行的JavaIDE开发工具,其有很多好用的功能为我们的开发提供帮助.但我们的工作空间中有很多项目时,管理起来就很头疼了. 但是我们又不想更换工作区间,所以我们需要一个更加有效的 ...

  2. 缓存1 静态缓存-->读库保存成php文件 mkdir-->file_put_contents-->var_export -->include

    @mkdir()-->file_put_contents-->$data =  "<?php\nreturn ".var_export($setting, tru ...

  3. git fetch pull checkout区别

    Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge <p style="margin-top: 0 ...

  4. contact form

    use the existing service: http://www.foxyform.com/

  5. Bitmap和Drawable浅谈

    一.概念区别 Bitmap - 称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB565.RGB8888.作为一种逐像素的显示对象执行效率高,但是缺点也很明显存储效率低.我们理解为一 ...

  6. MySQL数据备份和恢复

    1.数据备份 mysqldump -uroot -p databasename > file.sql 2.数据还原 mysql -u root -p databasename < file ...

  7. mysql if then

    CREATE PROCEDURE userinfo_modify( IN id INT ,IN loginid INT ,IN levelid INT ,IN namestr VARCHAR(50) ...

  8. OpenGL一些函数详解(二)

    OpenGL ES顶点数据绘制技巧 在OpenGL中,绘制一个长方体,需要将每个顶点的坐标放在一个数组中.保存坐标时有一些技巧(由于字母下标不好表示,因此将下标表示为单引号,如A1将在后文中表示为A' ...

  9. IOS NSArray 倒序

    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"1",@"2",@"3" ...

  10. sql server 2005导出数据

    */ EXEC sp_configure 'show advanced options', 1 GO */     配置选项 'show advanced options' 已从 0 更改为 1.请运 ...