题解:

按照位展开,然后一位一位判断

注意判断给出数据是否有问题

代码:

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=;
int flag[N],n,b[N][N],ne[*N*N],fi[N],zz[*N*N],num;
int t,zhan[N],dfn[N],m,l,q,ans,low[N],an[N];
void jb(int x,int y)
{
ne[++num]=fi[x];
fi[x]=num;
zz[num]=y;
}
void dfs(int x)
{
low[x]=dfn[x]=++l;
zhan[++t]=x;
flag[x]=true;
for (int i=fi[x];i!=;i=ne[i])
{
if (an[zz[i]])continue;
if(!dfn[zz[i]])dfs(zz[i]);
if(!flag[zz[i]])low[x]=min(low[x],dfn[zz[i]]);else
low[x]=min(low[x],low[zz[i]]);
}
if (dfn[x]==low[x])
{
ans++;
while (zhan[t]!=x)
{
flag[zhan[t]]=false;
an[zhan[t--]]=ans;
}
an[zhan[t--]]=ans;
flag[x]=false;
}
}
void init()
{
ans=num=l=;
memset(fi,,sizeof fi);
memset(an,,sizeof an);
memset(dfn,,sizeof dfn);
}
int main()
{
while (~scanf("%d",&n))
{
for (int i=;i<n;i++)
for (int j=;j<n;j++)scanf("%d",&b[i][j]);
q=;
for (int i=;i<n;i++)
if (b[i][i])q=;
for (int i=;i<n;i++)
for (int j=;j<n;j++)
if (b[i][j]!=b[j][i])q=;
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==)
{
jb(i+n,i);
jb(j+n,j);
}
else
{
jb(i,j+n);
jb(j,i+n);
}
}
else if (i%==&&j%==)
{
if (c==)
{
jb(i+n,j);
jb(j+n,i);
}
else
{
jb(i,i+n);
jb(j,j+n);
}
}
else
{
if (c==)
{
jb(i,j);
jb(i+n,j+n);
jb(j,i);
jb(j+n,i+n);
}
else
{
jb(i,j+n);
jb(i+n,j);
jb(j,i+n);
jb(j+n,i);
}
}
}
for (int i=;i<*n;i++)
if (!dfn[i])dfs(i);
for (int i=;i<n;i++)
if (an[i]==an[i+n])q=;
if (q)break;
}
if (!q)puts("YES");
else puts("NO");
}
return ;
}

zoj3656的更多相关文章

  1. zoj 3656 2-sat 不错的题

    http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemId=4879 TLE了一下午.然后没办法了 去搜题解 发现思路跟我的差点儿相同 可是 ...

随机推荐

  1. Hbase1.0伪分布式集群启动失败问题

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl/p/7340681.html 转载请注明出处 最近抽空折腾自己的虚拟机环境时启动伪分布式Hbase集群一直失败, ...

  2. linux上使用wget下载文件

    首次安装的centos操作系统是没有安装wget的,所以首先需要先安装wget,然后才能使用wget下载文件. 1.第一步,保证centos能正常连网.使用命令  :yum -y install wg ...

  3. python requests的使用说明

    #GET参数实例 requests.get('http://www.dict.baidu.com/s', params={'wd': 'python'}) #或 url = 'http://www.b ...

  4. Ubuntu16.04中用et对jmeter生成的数据统计成图表

    在Ubuntu系统中,用ctrl+Alt+t 打开终端: 输入et,即打开wps: 整理需要形成图表的数据,如: 用excel生成图表,如下: 表得出的性能图表,方法: 1.工具栏中选择插入——二维折 ...

  5. 算法+OpenCV】基于opencv的直线和曲线拟合与绘制(最小二乘法)

    http://blog.csdn.net/guduruyu/article/details/72866144 最小二乘法多项式曲线拟合,是常见的曲线拟合方法,有着广泛的应用,这里在借鉴最小二乘多项式曲 ...

  6. CentOS系统下yum命令的详细使用方法

    yum是什么yum = Yellow dog Updater, Modified 主要功能是更方便的添加/删除/更新RPM包. 它能自动解决包的倚赖性问题. 它能便于管理大量系统的更新问题 yum特点 ...

  7. 20145302张薇《Java程序设计》实验一报告

    20145302 <Java程序设计>实验一:Java开发环境的熟悉 实验内容 使用dos命令行编译.运行简单的Java程序: 使用IDEA编辑.编译.运行.调试Java程序. 1.命令行 ...

  8. 20145329《Java程序设计》第十周学习总结

    教材学习内容总结 网络编程 • 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据 1.网络概述 • 网络编程的实质:两个( ...

  9. nmap与Nessus扫描特定靶机分析

    打开装载Metasploitable2虚拟机的靶机,并获取靶机ip: 使用nmap+ip初步扫描靶机 PORT为端口,STATE为端口开放状态,SERVICE为端口的提供的服务.靶机的MAC地址为: ...

  10. How to Enable RPMForge Repository in RHEL/CentOS 7.x/6.x/5.x

    RPMforge repository is a utility that is used to install third party software packages under Red Hat ...