zoj3656
题解:
按照位展开,然后一位一位判断
注意判断给出数据是否有问题
代码:
#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的更多相关文章
- zoj 3656 2-sat 不错的题
http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemId=4879 TLE了一下午.然后没办法了 去搜题解 发现思路跟我的差点儿相同 可是 ...
随机推荐
- HDU - 5592 ZYB's Premutation (权值线段树)
题意:给出序列前k项中的逆序对数,构造出这个序列. 分析:使用权值线段树来确定序列元素. 逆序对的数量肯定是递增的,从最后一个元素开始逆向统计,则\(a[i] - a[i-1]\)即位置i之前比位置i ...
- C++文件操作:打开文件和写入文件
如果程序的运行结果仅仅显示在屏幕上,当要再次查看结果时,必须将程序重新运行一遍:而且,这个结果也不能被保留. 如果希望程序的运行结果能够永久保留下来,供随时查阅或取用,则需要将其保存在文件中. 文件分 ...
- 架构私用Nuget服务器
1.新建一个空的asp.net站点 2.通过nuget引用 Nuget.Server程序集,引用后项目会多出一些文件.修改web.config 里的apikey为你要上传包时用的apikey,我的为: ...
- jqgrid动态填充select
前两天使用jquery动态填充jqgrid的select,默认随便用一个dict填充(初始化页面是会替换掉),用着可以,后来发现当行数增多,回到以前行继续编辑发现select又变成了那个用来避免报错随 ...
- Python3.x:访问带参数链接并且获取返回json串
Python3.x:访问带参数链接并且获取返回json串 示例一: import json import xml.dom.minidom from urllib import request, par ...
- Java学习第二周学习笔记
20145307<Java程序设计>第二周学习总结 教材学习内容总结 Java语言中的很多基本语法都和C语言类似,以下Java中的基本语法 标识符 标识符是程序中自定义的一些名称. 由26 ...
- 20145230熊佳炜《网络对抗》实验五:MSF基础应用
20145230熊佳炜<网络对抗>实验五:MSF基础应用 主动攻击 首先,我们需要弄一个xp sp3 English系统的虚拟机,然后本次主动攻击就在我们kali和xp之间来完成. 然后我 ...
- LeetCode (262):Nim Game
You are playing the following Nim Game with your friend: There is a heap of stones on the table, eac ...
- Idea 切换git账号
重置一下账号设置,再次执行拉取或推送会提示重新输入账号密码 进入项目根目录执行:git config --system --unset credential.helper
- intellij 文件太大,无法code assistant
添加 idea.max.intellisense.filesize=2500 在IDE_HOME\bin\idea.properties https://intellij-support.jetbra ...