水题,不解释。

#include<stdio.h>
#include<math.h>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
#define N 1000002
struct node
{
int x,y;
int dis;
}base[10005],st,end;
int n,m;
int maps[1005][1005];
bool vis[1005][1005];
int dx[]={0,0,-1,1};
int dy[]={-1,1,0,0};
struct que
{
struct node t[N];
int head,tail;
void init()
{
head = tail = 0;
}
bool empty()
{
return head == tail;
}
struct node top()
{
return t[head];
}
void push(struct node a)
{
t[tail] = a;
tail ++;
if(tail >= N)
tail -= N;
}
void pop()
{
head ++;
if(head >= N)
head -= N;
}
}q;
int maxn;
int leng;
bool isok(int x,int y)
{
return x>=0&&x<n&&y>=0&&y<m;
}
void debug_map()
{
for(int i=0;i<n;i++,puts(""))
for(int j=0;j<m;j++)
printf("%3d",maps[i][j]);
}
void bfs()
{
node tt,tmp;
while(!q.empty())
{
tmp=q.top();
for(int d=0;d<4;d++)
{
tt.x=tmp.x+dx[d];
tt.y=tmp.y+dy[d];
tt.dis=tmp.dis+1;
if(isok(tt.x,tt.y)&&maps[tt.x][tt.y]==-1)
{
maps[tt.x][tt.y]=tt.dis;
maxn=max(maxn,tt.dis);
q.push(tt);
}
}
q.pop();
}
}
bool cal(int lim)
{
if(maps[st.x][st.y]<lim) return false;
q.init();
q.push(st);
node tmp,tt;
for(int i=0;i<=n;i++)
memset(vis[i],false,sizeof(bool)*(m+1)); while(!q.empty())
{
tmp=q.top();
for(int d=0;d<4;d++)
{
tt.x=tmp.x+dx[d];
tt.y=tmp.y+dy[d];
tt.dis=tmp.dis+1;
if(isok(tt.x,tt.y)&&maps[tt.x][tt.y]>=lim&&!vis[tt.x][tt.y])
{
vis[tt.x][tt.y]=true;
if(tt.x==end.x&&tt.y==end.y)
{
leng=tt.dis;
return true;
}
q.push(tt);
}
}
q.pop();
}
return false;
}
int main()
{
int cas;
scanf("%d",&cas);
st.dis=0;
int tt;
while(cas--)
{
q.init();
maxn=0;
scanf("%d%d%d",&tt,&n,&m);
scanf("%d%d%d%d",&st.x,&st.y,&end.x,&end.y); for(int i=0;i<n;i++)
memset(maps[i],-1,sizeof(int)*(m+1));
node t;t.dis=0;
for(int i=0;i<tt;i++)
{
scanf("%d%d",&base[i].x,&base[i].y);
maps[base[i].x][base[i].y]=0; t.x=base[i].x;
t.y=base[i].y; q.push(t);
}
bfs();
int l=0,r=n+m;
int mid;
int ans=0;
while(l<=r)
{
mid=(l+r)/2;
if(cal(mid)) {ans=mid;l=mid+1;}
else r=mid-1;
}
printf("%d %d\n",ans,leng);
}
return 0;
}
/*
3 3 3
0 0 2
1 0
1 1
1 2
*/

poj 3501 Escape from Enemy Territory 二分+bfs的更多相关文章

  1. poj 3501 Escape from Enemy Territory 预处理+二分+bfs

    传送门 给一个起点一个终点, 给出整个地图的宽和高, 给出n个敌人的坐标. 让你找到一条路径, 这条路径上的点距离所有敌人的距离都最短, 输出最短距离. 首先预处理出来地图上的所有点到敌人的最短距离, ...

  2. hdu 2337 Escape from Enemy Territory

    题目大意 给你一张nn*mm矩形地图.上面有些点上有敌营.给你起点和终点, 你找出一条最优路径.满足最优路径上的点离敌营的最近最短距离是所有路径最短的.若有多条找路径最短的一条. 分析 通过二分来确定 ...

  3. POJ 1475 Pushing Boxes 搜索- 两重BFS

    题目地址: http://poj.org/problem?id=1475 两重BFS就行了,第一重是搜索箱子,第二重搜索人能不能到达推箱子的地方. AC代码: #include <iostrea ...

  4. poj 3111 K Best 最大化平均值 二分思想

    poj 3111 K Best 最大化平均值 二分思想 题目链接: http://poj.org/problem?id=3111 思路: 挑战程序竞赛书上讲的很好,下面的解释也基本来源于此书 设定条件 ...

  5. hdu 5652 India and China Origins(二分+bfs || 并查集)BestCoder Round #77 (div.2)

    题意: 给一个n*m的矩阵作为地图,0为通路,1为阻碍.只能向上下左右四个方向走.每一年会在一个通路上长出一个阻碍,求第几年最上面一行与最下面一行会被隔开. 输入: 首行一个整数t,表示共有t组数据. ...

  6. hdu-5652 India and China Origins(二分+bfs判断连通)

    题目链接: India and China Origins Time Limit: 2000/2000 MS (Java/Others)     Memory Limit: 65536/65536 K ...

  7. POJ 2110 Mountain Walking 二分+bfs

    传送门 昨天看到这个题还以为是个脑残的dp, 然而脑残的是我. 题目意思就是从左上角走到右下角, 设x为路径上的最大值-最小值, 求x的最小值. 二分x, 对于每一个x, 枚举下界lower, low ...

  8. POJ 2289 Jamie's Contact Groups (二分+最大流)

    题目大意: 有n个人,可以分成m个组,现在给出你每个人可以去的组的编号,求分成的m组中人数最多的组最少可以有多少人. 算法讨论: 首先喷一下这题的输入,太恶心了. 然后说算法:最多的最少,二分的字眼. ...

  9. POJ 2251 Dungeon Master(3D迷宫 bfs)

    传送门 Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28416   Accepted: 11 ...

随机推荐

  1. ASP.NET MVC 学习7、为Model Class的字段添加验证属性(validation attribuate)

    Adding Validation to the Model ,在Model中添加数据验证 参考:http://www.asp.net/mvc/tutorials/mvc-4/getting-star ...

  2. CodeForces Round #290 Fox And Dinner

    而是Div2的最后一题,当时打比赛的时候还不会最大流.自己能够把它写出来然后1A还是很开心的. 题意: 有n个不小于2的整数,现在要把他们分成若干个圈.在每个圈中,数字的个数不少于3个,而且相邻的两个 ...

  3. ActivityManager: Warning: Activity not started, its current task has been brought to the front 的的问题

    运行android程序的时候提示:ActivityManager: Warning: Activity not started, its current task has been brought t ...

  4. System.web.optimization 在 Asp.Net WebForm 中应用得注意了

    我们也可以在Asp.Net WebForm项目中去使用Optimization,去处理我们的资源文件,从而起到优化网站性能的效果,前端知识得从小事做起.但是在使用过程中我却发现了下面的问题. 第一步: ...

  5. UVA 4080 Warfare And Logistics 战争与物流 (最短路树,变形)

    题意: 给一个无向图,n个点,m条边,可不连通,可重边,可多余边.两个问题,第一问:求任意点对之间最短距离之和.第二问:必须删除一条边,再求第一问,使得结果变得更大. 思路: 其实都是在求最短路的过程 ...

  6. 服务器安装Apache+Tomcat+Memcached共享Session的构架设计

    网站集群部署解决计划 一.       计划目标 实现互动留言系统.后台发布系统的高可用性,有效解决高并发量对单台应用服务器的打击,确保应用服务器单点故障不影响系统正常运行. 二.       部署架 ...

  7. C#中使用visio控件

    C#中使用visio控件 2012-08-25 18:14:19|  分类: 技术相关|举报|字号 订阅     其实就是C#访问VISIO的自动化模型,以前做了不少C#和Excle及word 的交互 ...

  8. why dicePlayer cannot player with defy mb526

    硬件加速视频播放器 DicePlayer v2.0.38 ... ..... ...... ........ \ 局限性:- 视频兼容性依赖于您设备的视频硬解码能力

  9. Top Android App使用的组件 3

    8684公交 AdChina:com.adchina:易传媒广告平台 AdsMogo:com.adsmogo:芒果移动广告平台 大姨吗 AChartEngine:org.achartengine:An ...

  10. wireshark tcp 协议分析 z

    虽然知道wireshark是抓包神器,只会大概大概用一下,还用一下下tcpdump,略懂一点BPF过滤器,也知道一点怎么用 wirkshark过滤相关的报文,但是对于详细的字段的含义,如何查看TCP的 ...