BZOJ3421 : Poi2013 Walk
2024-10-19 02:19:35
最多只有一个连通块大小大于$nk$,所以用hash表进行BFS的时候只扩展$nk$步即可。
时间复杂度$O(n^2k)$。
#include<cstdio>
typedef long long ll;
const int N=5001000,M=9999991;
int n,m,lim,i,h=1,t,g[M],nxt[N],ed;ll v[N],a[N/5],q[N],x,S,T;char s[70];
inline void del(ll x){
int u=x%M;
v[ed]=x;nxt[ed]=g[u];g[u]=ed++;
}
inline void add(ll x){
int u=x%M;
for(int i=g[u];i;i=nxt[i])if(v[i]==x)return;
v[ed]=x;nxt[ed]=g[u];g[u]=ed++;q[++t]=x;
}
inline ll read(){
ll t=0;
scanf("%s",s);
for(int i=0;i<n;i++)t=t*2+s[i]-'0';
return t;
}
int main(){
scanf("%d%d",&n,&m);lim=n*m+5;
add(S=read());T=read();
for(i=0;i<m;i++)del(a[i]=read());
while(h<=t&&t<=lim){
x=q[h++];
if(x==T)return puts("TAK"),0;
for(i=0;i<n;i++)add(x^(1LL<<i));
}
if(t<=lim)return puts("NIE"),0;
for(h=1,t=ed=i=0;i<M;i++)g[i]=0;
add(T);
for(i=0;i<m;i++)del(a[i]);
while(h<=t&&t<=lim){
x=q[h++];
if(x==S)return puts("TAK"),0;
for(i=0;i<n;i++)add(x^(1LL<<i));
}
return puts(t<=lim?"NIE":"TAK"),0;
}
最新文章
- react+redux教程(一)connect、applyMiddleware、thunk、webpackHotMiddleware
- Monkey Android API 翻译
- 网络热恋之SDWebImage
- [转] 在Linux平台使用mhVTL虚拟化磁带库
- SourceTree不出现用户登录窗口,提示错误fatal: unable to access&#39;...&#39;; error setting certificate verify locations
- hdu 1228 A+B 字符串处理 超级大水题
- nginx反向代理的简单配置
- Objective-C中的Block(闭包) (轉載)
- 粵語/廣東話/Cantonese 資料/Material
- ping不通的几种可能原因
- jsonarray和jsonobject
- vdi、vhd、vmdk虚拟格式转换
- 设计模式(Design Patterns)Java版
- ANOVA-方差分析和单尾方差分析
- mysql 原理 ~ 死锁问题
- DevSecOps 运维模式中的安全性
- TCP三次握手--syn攻击
- SQLyog简介及其功能(附百度云盘下载地址)
- @pathvariable和@RequestParam的区别
- 原生和web交互jsbridge交互总结
热门文章
- poj1733(种类并查集+离散化)
- Installing MySQL Server on CentOS
- 为什么没有选择sipml5
- myeclipse报错: java compiler level does not match the version of the installed java project facet
- 深入理解计算机中的 csapp.h和csapp.c
- C专家编程cdecl
- C语言中如何将二维数组作为函数的参数传递
- BurpSuite导出log配合SQLMAP批量扫描注入点
- loadrunner生成随机数
- Liferay 6.2 改造系列之十二:修改Portal设置页面表单内容