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. 【Java】Object

    Object转Map import com.alibaba.fastjson.JSON; import com.runsky.utils.JsonUtils; String objectToJson ...

  2. Java中保留两位小数之format

    String.format仅限double类型可用 int类型会报错 double d1 = 6.6666;System.out.println(String.format("%.2f&qu ...

  3. Stream流常用API

    文档 https://www.runoob.com/java/java8-streams.html JDK8 Stream API: https://docs.oracle.com/javase/8/ ...

  4. 初学银河麒麟linux笔记 第三章 QT缺少的模块下载、更新软件源操作

    在共享文件夹里将WINDOWS里已经编写好的QT程序编译之后,提示 Qt5: Unknown module(s) in QT: serialport 经查询,需要安装对应的模块库,写入 sudo ap ...

  5. 小家大变局.PDF

    书本详情 小家大变局种类:Self-Help, Relationships & Lifestyle - Families & Parents年:2022出版社:中信出版集团语言:chi ...

  6. postgresql 学习链接

    1.菜鸟教程:https://www.runoob.com/postgresql/postgresql-operators.html 2.易百教程:https://www.yiibai.com/pos ...

  7. 复杂SQL语句及其优化

    一,复杂SQL语句类型 1 ,笛卡尔连接 题目1:找出工资超过各自经理的员工姓名 表:employee(id , name , depid , salary, manager_id ) SELECT ...

  8. You are using pip version 8.1.2, however version 23.0 is available.You should consider upgrading via the 'pip install --upgrade pip' command.

    今天使用python2安装es模块时报错: 原因是pip(模块管理工具)版本过低,需先升级pip,再进行安装 先替换pip的镜像,默认镜像拉取慢,还可能会失败 cd ~;mkdir .pip;touc ...

  9. C# load and unload dll

    1. Invoker Any c# project Create a new application domain Create a proxy within the domain Unload th ...

  10. Android学习——控件ProgressBar

    1.常用属性