tzoj:3613 突破包围
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 突破包围的更多相关文章
- SSH隧道应用, 突破网络限制
文/怡文圣美 这篇文章可以帮你解决下面三个问题: 不能直连服务器, 要先登陆跳板机, 造成客户端工具无法连接服务器. 服务器没有公网IP, 且只允许公司IP访问, 要在家里操作要先远程桌面到工作机再登 ...
- 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇二:基于OneNote难点突破和批量识别
篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...
- 【小型系统】简单的刷票系统(突破IP限制进行投票)
一.前言 相信大家平时肯定会收到朋友发来的链接,打开一看,哦,需要投票.投完票后弹出一个页面(恭喜您,您已经投票成功),再次点击的时候发现,啊哈,您的IP(***.***.***.***)已经投过票了 ...
- [LeetCode] Surrounded Regions 包围区域
Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...
- FineUI(开源版)v4.2.2发布(8年125个版本,官网示例突破300个)!
开源版是 FineUI 的基石,从 2008 年至今已经持续发布了 120 多个版本,拥有会员 15,000 多位,捐赠会员达到 1,200 多位. FineUI(开源版)v4.2.2 是 8 年 ...
- 庆祝下,提交了第一个ceph pull request。实现了从0到1的突破
庆祝一下!经过社区老司机的带路,昨天提交了第一个ceph pull request.实现了从0到1的突破,希望再接再厉提交更多代码到社区,为社区发展贡献一点自己力量. 提交的第一个被社区fix的bug ...
- Tor网络突破IP封锁,爬虫好搭档【入门手册】
本文地址:http://www.cnblogs.com/likeli/p/5719230.html 前言 本文不提供任何搭梯子之类的内容,我在这里仅仅讨论网络爬虫遇到的IP封杀,然后使用Tor如何对抗 ...
- 简单爬虫,突破IP访问限制和复杂验证码,小总结
简单爬虫,突破复杂验证码和IP访问限制 文章地址:http://www.cnblogs.com/likeli/p/4730709.html 好吧,看题目就知道我是要写一个爬虫,这个爬虫的目标网站有 ...
- 对于挑战书上的很久之前都看不懂的DP看懂的突破
突破一..牢记问题概念 并且牢记dp状态方程 突破二..一直有一个求和dp转化成O1dp递推的式子看不懂.. 看不懂的原因是..没有分清求和符号作用的范围 提醒:以后遇到求和符号一定明确其求和的式子的 ...
- 关于P,V操作理解的突破,关于并发设计与并行
今天又找了一篇博客研究P,V操作.. 发现..它有一个变量没有声明.. 我就换了篇博客..http://c.biancheng.net/cpp/html/2600.html 然后就看懂了.. 关键突破 ...
随机推荐
- dcat-admin主题
1.白色主题 admin设置: css /*对于在表单中使用grid列表时点击按钮时没有提示和报错,是因为 显示的html与当前弹框错位了,并隐藏在当前弹框下*/ .popover{ z-index: ...
- Word发博客测试
这是一篇来自word的文章测试,测试word写博客发布效果. 操作参考:http://www.cnblogs.com/liezhengli/p/5854470.html 关键在于找到博客园的MetaW ...
- Spring 常见注解及其作用
1.@ConfigurationProperties 可以非常方便的把资源文件中的内容绑定到对象上 绑定单一属性值,绑定整个对象属性 2.@Value("${app.n ...
- LENGTH,LENGTHB
LENGTH 1.语法 length(string) 2.说明: 统计字段的字符长度 3.示例: select length('abcd') from dual; --返回值:4 select len ...
- Linux 第七节( 磁盘配额,RAID )
vim /etc/fstab //编辑文件 UUID=xxxxxxxxxxxxxx /boot xfs defaults,uquota 0 0 //增加uqota命令,允许磁盘扩容 ino ...
- 环保行业ERP主要的几大治理区域?
环保行业是指在国民经济结构中,以防治环境污染.改善生态环境.保护自然资源为目的而进行的技术产品开发.商业流通.资源利用.信息服务.工程承包等活动的总称. 哲讯环保ERP行业产业链的上游主要是钢铁.有色 ...
- Panel容器中显示多个窗体并通过按钮实现窗体切换
Panel容器中显示多个窗体并通过按钮实现窗体切换 在项目开发中经常会有如下需求: 主窗体formMain中有个一Panle: 在Panel内显示多个窗体,如form1,form2--,分别通过不同按 ...
- Array方法学习总结
Array 对象支持在 单个变量名下存储多个元素. Array方法: 在遍历多个元素的方法中,下面的方法在访问索引之前执行in检查,并且不将空槽与undefined合并:concat() 返回一个新数 ...
- python-djanggo 实现读取excel 表格在网页中展示
1.准备读取数据 放到项目文件夹下 2.熟悉表结构 3.准备处理依赖库 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas o ...
- 【git】3.1git分支-分支简介
资料来源 (1) https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%AE%80%E4%BB%8B ...