bzoj4395(技巧BFS)
来源:互联网 发布:淘宝买家旺旺名 编辑:程序博客网 时间:2024/05/16 17:11
看网上的题解都是,不停bfs直到不再更新,感觉这样常数会大一些。
实际上我们能够到达一个点,1:到达过他的相邻点,2:他的灯被打开了
那么我们就维护两个bool型数组,一个判断是否到达相邻点,一个判断灯是否打开,只有当两个条件都成立的时候才把该位置加进队列里面去
#include<cstdio>#include<cstring>#include<cmath>#include<queue>#include<cstdlib>#include<algorithm>using namespace std;inline int read(){int ans;char ch;while ((ch=getchar())<'0'||ch>'9') ;ans=ch-'0';while ((ch=getchar())>='0'&&ch<='9') ans=ans*10+ch-'0';return ans;}const int qx[]={0,0,1,-1};const int qy[]={1,-1,0,0};int n,m;int head[105][105],tot;struct aa {int x,y,pre;}a[200005];void addedge(int g,int b,int c,int d) {a[++tot].x=c,a[tot].y=d;a[tot].pre=head[g][b];head[g][b]=tot;}bool t1[105][105],t2[105][105],b[105][105];queue<aa> q;int main(){n=read(),m=read();int gg,bb,cc,dd;for (int i=1;i<=m;i++){gg=read(),bb=read(),cc=read(),dd=read();addedge(gg,bb,cc,dd);}int ans=1,x,y;queue<aa> q;q.push((aa){1,1,0});t1[1][1]=t2[1][1]=true;while (!q.empty()){aa u=q.front();q.pop();x=u.x,y=u.y;for (int i=head[x][y];i;i=a[i].pre)if (!t1[a[i].x][a[i].y]){if (t2[a[i].x][a[i].y]) q.push((aa){a[i].x,a[i].y,0});t1[a[i].x][a[i].y]=true;ans++;}for (int i=0;i<4;i++) if (!t2[x+qx[i]][y+qy[i]]){if (t1[x+qx[i]][y+qy[i]])q.push((aa){x+qx[i],y+qy[i],0});t2[x+qx[i]][y+qy[i]]=true;}}printf("%d",ans);return 0;}
0 0
- bzoj4395(技巧BFS)
- bzoj4395【Usaco2015 Dec】Switching on the Lights
- fzu 2150 Fire Game 【技巧BFS】
- POJ 1383 Labyrinth (技巧BFS)
- 迷宫寻宝(一)bfs,注意搜索条件,有点儿技巧
- HDU 4474 Yet Another Multiple Problem【BFS+一个判断技巧】
- poj Children of the Candy Corn(裸bfs+一点技巧)
- HDOJ 1253 胜利大逃亡 (三维BFS+技巧)
- bzoj 1656: [Usaco2006 Jan] The Grove 树木 (bfs+技巧)
- BFS
- bfs
- BFS
- BFS
- bfs
- BFS
- bfs
- BFS
- BFS
- Linux下C++操作redis简述
- 利用接口回调实现fragment与activity的通信
- Dojo1.11官方教程文档翻译(2.1)CND
- BootStrap实战一之主体框架
- 高通LCD与TP模块间交互之callback机制(内核通知链)
- bzoj4395(技巧BFS)
- 2-面试题-HTML5+CSS3(前端常见面试题带答案 )
- 解决win7 64位[ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
- 模糊查找
- XGBoost cross_validation脚本学习
- 3-js面试题(前端面试题带答案)
- Fragment 和 Fragment 之间的通讯
- JavaScript设计模式一(单例模式、门面模式、适配器模式)
- QT+VS2005安装配置