http://www.tzcoder.cn/acmhome/problemdetail.do?&method=showdetail&id=3613

算出两两之间min距离,然后从起点开始循环时间点,到的了的地方进队

#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define pai pair<int,int>
char mp[105][105];
struct node{
int x,y,ii;
}e,s;
int m,n,k;
vector<node>ve;
vector<pai>v[100105];
int visit[105][105],stp[105][105],kk[105];
int xi[]={1,-1,0,0};
int yi[]={0,0,1,-1};
int solve(node a,node b)//算出两点间最短距离
{
memset(visit,0,sizeof visit);
visit[a.x][a.y]=1;
memset(stp,INF,sizeof stp);
stp[a.x][a.y]=0;
queue<node>qu;
qu.push(a);
while(!qu.empty()){
node q=qu.front();qu.pop();
if(q.x==b.x&&q.y==b.y)return stp[q.x][q.y];
for(int i=0;i<4;i++){
int xx=xi[i]+q.x,yy=yi[i]+q.y;
if(xx>=0&&xx<n&&yy>=0&&yy<m&&visit[xx][yy]==0&&mp[xx][yy]!='x'){
visit[xx][yy]=1;
node p;p.x=xx,p.y=yy;
stp[p.x][p.y]=stp[q.x][q.y]+1;
qu.push(p);
}
}
}
return INF;
}
int solve2(node a,node b)//按时间点进队,看是否能走到终点
{
int i,j;
memset(visit,0,sizeof visit);
visit[a.x][a.y]=1;
queue<node>qu;
a.ii=0;//这里注意先赋值再进队!!这点wa了
qu.push(a);
i=1;
while(!qu.empty()){
while(!qu.empty()&&qu.front().ii+1==i){
node p=qu.front();qu.pop();
if(p.x==b.x&&p.y==b.y)return 1;
for(j=0;j<v[p.x*1000+p.y].size();j++){
int xi=v[p.x*1000+p.y][j].first,yi=v[p.x*1000+p.y][j].second;
int xx=xi/1000,xy=xi%1000;
if(yi<=kk[i]&&visit[xx][xy]==0){
visit[xx][xy]=1;
node op;op.x=xx,op.y=xy,op.ii=p.ii+1;
if(op.x==b.x&&op.y==b.y)return 1;
qu.push(op);
}
}
p.ii++;
qu.push(p);
}//一个时间点循环一段
i++;
if(i>k)return 0;
}
return 0;
}
int main()
{
int i,j,t;scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
ve.clear();
for(i=0;i<n;i++){
scanf("%s",mp[i]);
for(j=0;j<m;j++){
if(mp[i][j]=='y')s.x=i,s.y=j,ve.push_back(s);
if(mp[i][j]=='d')e.x=i,e.y=j,ve.push_back(e);
if(mp[i][j]=='*'){
node oo;oo.x=i,oo.y=j;ve.push_back(oo);
}
}
}
scanf("%d",&k);
for(i=1;i<=k;i++)scanf("%d",&kk[i]);
for(i=0;i<100105;i++)v[i].clear();//这里不要=100105,!!这也wa了!
for(i=0;i<ve.size();i++){
for(j=i+1;j<ve.size();j++){
int dis=solve(ve[i],ve[j]);
int a=ve[i].x*1000+ve[i].y,b=ve[j].x*1000+ve[j].y;
v[a].push_back(pai(b,dis));
v[b].push_back(pai(a,dis));
}
}
int f=solve2(s,e);
if(f==1)printf("good luck!\n");
else printf("poor yzq!\n");
}
}

tzoj:3613 突破包围的更多相关文章

  1. SSH隧道应用, 突破网络限制

    文/怡文圣美 这篇文章可以帮你解决下面三个问题: 不能直连服务器, 要先登陆跳板机, 造成客户端工具无法连接服务器. 服务器没有公网IP, 且只允许公司IP访问, 要在家里操作要先远程桌面到工作机再登 ...

  2. 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇二:基于OneNote难点突破和批量识别

    篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...

  3. 【小型系统】简单的刷票系统(突破IP限制进行投票)

    一.前言 相信大家平时肯定会收到朋友发来的链接,打开一看,哦,需要投票.投完票后弹出一个页面(恭喜您,您已经投票成功),再次点击的时候发现,啊哈,您的IP(***.***.***.***)已经投过票了 ...

  4. [LeetCode] Surrounded Regions 包围区域

    Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...

  5. FineUI(开源版)v4.2.2发布(8年125个版本,官网示例突破300个)!

    开源版是 FineUI 的基石,从 2008 年至今已经持续发布了 120 多个版本,拥有会员 15,000 多位,捐赠会员达到 1,200 多位.   FineUI(开源版)v4.2.2 是 8 年 ...

  6. 庆祝下,提交了第一个ceph pull request。实现了从0到1的突破

    庆祝一下!经过社区老司机的带路,昨天提交了第一个ceph pull request.实现了从0到1的突破,希望再接再厉提交更多代码到社区,为社区发展贡献一点自己力量. 提交的第一个被社区fix的bug ...

  7. Tor网络突破IP封锁,爬虫好搭档【入门手册】

    本文地址:http://www.cnblogs.com/likeli/p/5719230.html 前言 本文不提供任何搭梯子之类的内容,我在这里仅仅讨论网络爬虫遇到的IP封杀,然后使用Tor如何对抗 ...

  8. 简单爬虫,突破IP访问限制和复杂验证码,小总结

    简单爬虫,突破复杂验证码和IP访问限制 文章地址:http://www.cnblogs.com/likeli/p/4730709.html   好吧,看题目就知道我是要写一个爬虫,这个爬虫的目标网站有 ...

  9. 对于挑战书上的很久之前都看不懂的DP看懂的突破

    突破一..牢记问题概念 并且牢记dp状态方程 突破二..一直有一个求和dp转化成O1dp递推的式子看不懂.. 看不懂的原因是..没有分清求和符号作用的范围 提醒:以后遇到求和符号一定明确其求和的式子的 ...

  10. 关于P,V操作理解的突破,关于并发设计与并行

    今天又找了一篇博客研究P,V操作.. 发现..它有一个变量没有声明.. 我就换了篇博客..http://c.biancheng.net/cpp/html/2600.html 然后就看懂了.. 关键突破 ...

随机推荐

  1. sudo:Operation not permitted事件

    转载请注明来源:https://www.cnblogs.com/Sherlock-L/p/14933949.html 前言 事情是这样的,在风和日丽的一天,我如往常一样在服务器上敲下了sudo xxx ...

  2. vue用echarts不显示

    在html页面中套vue的情况来使用echarts,或者单独vue使用echarts,出现页面不渲染图表,代码渲染有的情况,加个this.$nextTick(()=>{})让他主动渲染一下就可以 ...

  3. Visual Studio 安装时,共享组件、工具和SDK的路径无法更改解决方法

    Visual Studio 安装时,共享组件.工具和SDK的路径无法更改解决方法 解决方案: 找到电脑中Visual Studio 2019或其他版本的VS 的注册表,删除共享组件.工具和 SDK 的 ...

  4. 使用go自定义生成项目LISENSE(授权协议)

    需要使用一个使用go开发的工具,叫license,在Windows下安装这个工具,请确保你使用的go sdk是1.16以上的版本,然后执行下面的命令: go install github.com/ni ...

  5. cpp chrono basic

    // cpp 20 //c++ - Number of seconds since midnight - Stack Overflow //https://stackoverflow.com/ques ...

  6. (python)python 3.9 安装 robotframework-ride 因为 wxPython 失败

    1. 正常安装方式 1)安装 robotframework pip install robotframework 2) 安装 robotframework-ride pip install robot ...

  7. EMQX+阿里云飞天洛神云网络 NLB:MQTT 消息亿级并发、千万级吞吐性能达成

    随着物联网技术的发展与各行业数字化进程的推进,全球物联网设备连接规模与日俱增.一个可靠高效的物联网系统需要具备高并发.大吞吐.低时延的数据处理能力,支撑海量物联网数据的接入与分析,从而进一步挖掘数据价 ...

  8. git命令,回滚上一个版本,回滚n个版本,撤销回滚

    1 回滚到上一个版本 git checkout . :add之前的回滚 git reset --hard:add之后,commit之前 git reset --hard origin/test:com ...

  9. 监听异常:The listener supports no services

    数据库版本:单机环境19c 实例是正常的 [oracle@sit19c admin]$ sqlplus / as sysdba SQL*Plus: Release 19.0.0.0.0 - Produ ...

  10. redis geo 做距离计算排序分页

    redis geo 做距离计算排序分页 // 添加经纬度和店铺id geoadd store_list lng lat store_id 计算距离排序和生成临时文件 georadius store_l ...