题目戳这里

有问题可以在博客@

应该还会有人来看吧,嘻嘻


正题:

题目大意:

题目很清楚,就是一个点有一定的范围,会有一定的花费

求三个点中的任意两个点到另一个点的最小花费

(麻麻教育我千万读好题目(>_<)~)

思路

很容易想到跑最短路,但是建边的话,根本存不下来

所以我们直接存点的坐标,然后直接遍历范围内每个点就好了(遍历是看图找规律吧,反正我动脑子看不出来)

跑一边最短路就好了

bzoj完全没问题,这里指luogu

spfa?他好像又死了(o2水过)

堆优化迪杰斯特拉是个好东西

我是先写的spfa,然后改了改一丢丢就写成了迪杰斯特拉,感觉他俩好像啊

下面是dijkstar和死了的spfa

代码:堆优化迪杰斯特拉

#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <queue>
#include <iostream>
#define maxn 155
#define inf 0x3f3f3f3f
using namespace std;
int n,m;
int a[maxn][maxn];
int b[maxn][maxn];
int dis[maxn][maxn];
int x[4],y[4];
int PKU[4][4];
struct node
{
int x,y,q;
node(int xx,int yy,int qq)
{
x=xx;y=yy;
q=qq;
}
bool operator < (const node &a) const
{
return q>a.q;
}
};
inline int read()
{
int x=0,f=1;char s=getchar();
while('0'>s||s>'9') {if(s=='-')f=-1;s=getchar();}
while('0'<=s&&s<='9') {x=(x<<3)+(x<<1)+s-'0';s=getchar();}
return x*f;
}
void dijstra(int js)
{
memset(dis,inf,sizeof(dis));
priority_queue<node> q;
q.push(node(x[js],y[js],0));
dis[x[js]][y[js]]=0;
while(!q.empty())
{
node u=q.top();
q.pop();
if(dis[u.x][u.y]!=u.q) continue;
int len=b[u.x][u.y];
int v=dis[u.x][u.y]+a[u.x][u.y];
for(int i=max(1,u.x-len);i<=min(n,u.x+len);++i)
{
int tmp=len-abs(u.x-i);
for(int j=max(1,u.y-tmp);j<=min(m,u.y+tmp);j++)
{
if(dis[i][j] > v)
{
dis[i][j] = v;
q.push(node(i,j,dis[i][j]));
}
}
}
}
for(int i=1;i<=3;++i) PKU[js][i]=dis[x[i]][y[i]];
}
int main(int argc, char const *argv[])
{
n=read();m=read();
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
b[i][j]=read();
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
a[i][j]=read();
for (int i = 1; i <= 3; ++i)
{
x[i]=read();
y[i]=read();
}
for(int i=1;i<=3;++i) dijstra(i);
int id=0,ans=inf;
for(int i=1;i<=3;++i)
{
int tm=PKU[1][i]+PKU[2][i]+PKU[3][i];
if(ans>tm) ans=tm,id=i;
}
if(ans==inf) return puts("NO"),0;
if(id==1) puts("X");
if(id==2) puts("Y");
if(id==3) puts("Z");
printf("%d",ans);
return 0;
}

代码:spfa

	#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <queue>
#include <iostream>
#define maxn 155
#define inf 0x3f3f3f3f
using namespace std;
int n,m;
int a[maxn][maxn];
int b[maxn][maxn];
int dis[maxn][maxn];
int vis[maxn][maxn];
int x[4],y[4];
int PKU[4][4];
struct node
{
int x,y;
node(int xx,int yy)
{
x=xx;y=yy;
}
};
inline int read()
{
int x=0,f=1;char s=getchar();
while('0'>s||s>'9') {if(s=='-')f=-1;s=getchar();}
while('0'<=s&&s<='9') {x=(x<<3)+(x<<1)+s-'0';s=getchar();}
return x*f;
}
void spfa(int js)
{
memset(dis,inf,sizeof(dis));
queue<node> q;
q.push(node(x[js],y[js]));
dis[x[js]][y[js]]=0;
while(!q.empty())
{
node u=q.front();
q.pop();vis[u.x][u.y]=0;
int len=b[u.x][u.y];
int v=dis[u.x][u.y]+a[u.x][u.y];
for(int i=max(1,u.x-len);i<=min(n,u.x+len);++i)
{
int tmp=len-abs(u.x-i);
for(int j=max(1,u.y-tmp);j<=min(m,u.y+tmp);j++)
{
if(dis[i][j] > v)
{
dis[i][j] = v;
if(!vis[i][j])
{
vis[i][j]=1;
q.push(node(i,j));
}
}
}
}
}
for(int i=1;i<=3;++i) PKU[js][i]=dis[x[i]][y[i]];
}
int main(int argc, char const *argv[])
{
n=read();m=read();
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
b[i][j]=read();
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
a[i][j]=read();
for (int i = 1; i <= 3; ++i)
{
x[i]=read();
y[i]=read();
}
for(int i=1;i<=3;++i) spfa(i);
int id=0,ans=inf;
for(int i=1;i<=3;++i)
{
int tm=PKU[1][i]+PKU[2][i]+PKU[3][i];
if(ans>tm)
{
ans=tm;
id=i;
}
}
if(ans==inf)
return puts("NO"),0;
if(id==1)
puts("X");
if(id==2)
puts("Y");
if(id==3)
puts("Z");
printf("%d",ans);
return 0;
}

厚颜无耻的骗波赞( • ̀ω•́ )✧

luogu4473 BZOJ2143 2011[国家集训队]飞飞侠的更多相关文章

  1. Luogu 4473 [国家集训队]飞飞侠

    BZOJ 2143 新技能:并查集优化最短路. 暴力最短路是$O(n^4)$的,然后拿个线段树优化一下连边就$O($能过$)$了. 但是这样都太慢了. 我们考虑一个点如果之前被更新过了,那么之后就不会 ...

  2. happiness[国家集训队2011(吴确)]

    [试题来源] 2011中国国家集训队命题答辩 [问题描述] 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科 ...

  3. COGS1882 [国家集训队2011]单选错位

    ★   输入文件:nt2011_exp.in   输出文件:nt2011_exp.out   简单对比时间限制:1 s   内存限制:512 MB [试题来源] 2011中国国家集训队命题答辩 [问题 ...

  4. AC日记——[国家集训队2011]旅游(宋方睿) cogs 1867

    [国家集训队2011]旅游(宋方睿) 思路: 树链剖分,边权转点权: 线段树维护三个东西,sum,max,min: 当一个区间变成相反数时,sum=-sum,max=-min,min=-max: 来, ...

  5. 刷题总结——飞飞侠(bzoj2143 最短路)

    题目: Description 飞飞国是一个传说中的国度,国家的居民叫做飞飞侠.飞飞国是一个N×M的矩形方阵,每个格子代表一个街区.然而飞飞国是没有交通工具的.飞飞侠完全靠地面的弹射装置来移动.每个街 ...

  6. cogs 1901. [国家集训队2011]数颜色

    Cogs 1901. [国家集训队2011]数颜色 ★★★   输入文件:nt2011_color.in   输出文件:nt2011_color.out   简单对比时间限制:0.6 s   内存限制 ...

  7. BZOJ 2150 cogs 1861 [国家集训队2011]部落战争

    题目描述 lanzerb的部落在A国的上部,他们不满天寒地冻的环境,于是准备向A国的下部征战来获得更大的领土. A国是一个M*N的矩阵,其中某些地方是城镇,某些地方是高山深涧无人居住.lanzerb把 ...

  8. 1893. [国家集训队2011]等差子序列(bitset)

    ★★   输入文件:nt2011_sequence.in   输出文件:nt2011_sequence.out   简单对比时间限制:0.3 s   内存限制:512 MB [试题来源] 2011中国 ...

  9. BZOJ2143 飞飞侠 & [校内NOIP2018模拟20181026] 最强大脑

    Time Limit: 50 Sec Memory Limit: 259 MB Description 飞飞国是一个传说中的国度,国家的居民叫做飞飞侠.飞飞国是一个N×M的矩形方阵,每个格子代表一个街 ...

随机推荐

  1. 异步通信----WebSocket

    什么是WebSocket? WebSocket API是下一代客户端-服务器的异步通信方法.该通信取代了单个的TCP套接字,使用ws或wss协议,可用于任意的客户端和服务器程序.WebSocket目前 ...

  2. 【python-opencv】22-直方图

    直方图目录: 22.1 直方图的计算,绘制与分析 22.1.1 统计直方图 22.1.2 绘制直方图 22.1.3 使用掩膜(遮罩) 22.2 直方图均衡化 22.2.1 OpenCV中的直方图均衡化 ...

  3. 代码这样写更优雅(Python版)

    要写出 Pythonic(优雅的.地道的.整洁的)代码,还要平时多观察那些大牛代码,Github 上有很多非常优秀的源代码值得阅读,比如:requests.flask.tornado,笔者列举一些常见 ...

  4. Ajax返回乱码

    1.关于JSP页面中的pageEncoding和contentType两种属性的区别: pageEncoding是jsp文件本身的编码,contentType的charset是指服务器发送给客户端时的 ...

  5. Win10系统 Eclipse 下'Publishing to Tomcat'has encountered a problem解决办法

    首先贴出来错误: 详情为:Publishing failedCould not publish to the server.There were issues during deployment to ...

  6. notefirst使用

    1:如果格式不正确,导入题录失败的话,可以手动添加.点击新建题录即可.输入文章的标题等信息. 2:导入word中的文献,可以使用word中notefirst的引文编辑功能,对文献进行删除,编辑等. 3 ...

  7. Qt界面控件值获取异常处理

    情景简述: 正常情况,我们从控件获取的值是OK的,但有时候就是奇怪的不对头,那么我们可以给获取后的值加上一个不痛不痒的函数,再返回,结果就OK了.至于原因嘛,[呲牙][呲牙] 比如: //正常情况 d ...

  8. memcache分布式布置方案

    利用hash算法 key->hash->取余%2 mod ->server=array()=>server[mod]算出是第几个memcache服务器

  9. jquery控制css的display属性(显示与隐藏)

    jquery控制div的显示与隐藏,很方便的. 例如: $("#id").show()表示display:block, $("#id").hide()表示dis ...

  10. vs调试程序时发现变量、类等程序找不到混乱问题

    vs中不能同时打开两个解决方案名称相同的程序,否则会运行时出现混乱,比如变量监测不到,类的属性不全等问题