bzoj 2007 海拔 —— 最短路
2024-09-03 10:14:21
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2007
最后一定是起点周围一片0,终点周围一片1;
所以建出图来跑最短路即可。
代码如下:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
int const xn=,xm=8e6+;
int n,hd[xn],ct,to[xm],nxt[xm],w[xm],dis[xn];
bool vis[xn];
struct N{
int id,d;
N(int x=,int d=):id(x),d(d) {}
bool operator < (const N &y) const
{return d>y.d;}
};
priority_queue<N>q;
int rd()
{
int ret=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=; ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return f?ret:-ret;
}
void add(int x,int y,int z){to[++ct]=y; nxt[ct]=hd[x]; hd[x]=ct; w[ct]=z;}
int id(int x,int y)
{
if(x<||y>n)return n*n+;
if(x>n||y<)return ;
return (x-)*n+y;
}
void dij()
{
memset(dis,0x3f,sizeof dis);
dis[]=; q.push(N(,));
while(q.size())
{
int x=q.top().id; q.pop();
if(vis[x])continue; vis[x]=;
for(int i=hd[x],u;i;i=nxt[i])
if(dis[u=to[i]]>dis[x]+w[i])
{
dis[u]=dis[x]+w[i];
q.push(N(u,dis[u]));
}
}
}
int main()
{
n=rd();
for(int i=;i<=n+;i++)
for(int j=,x;j<=n;j++)
x=rd(),add(id(i,j),id(i-,j),x);
for(int i=;i<=n;i++)
for(int j=,x;j<=n+;j++)
x=rd(),add(id(i,j-),id(i,j),x);
for(int i=;i<=n+;i++)
for(int j=,x;j<=n;j++)
x=rd(),add(id(i-,j),id(i,j),x);
for(int i=;i<=n;i++)
for(int j=,x;j<=n+;j++)
x=rd(),add(id(i,j),id(i,j-),x);
dij();
printf("%d\n",dis[n*n+]);
return ;
}
最新文章
- ---Shell的数组遍历
- 操作系统笔记系列 一 Linux
- iOS异步下载下载进度条显示
- IOS开发中NSRunloop跟NSTimer的问题
- 【原创】CHROME 最小字体限制为12PX的终极解决方案
- 线程间操作无效: 从不是创建控件&ldquo;textBox2&rdquo;的线程访问它
- C程序设计语言练习题1-9
- DataSet与DataAdapter的关系
- 服务器是R710常见错误汇总:
- ubuntu 更新引导命令
- Python自动化--语言基础4--模块、文件读写、异常
- web 参考网址
- 部署testlink报错,安装wampserver时提示丢失MSVCR110.dll
- TortoiseGit的ssh key和Git的ssh key
- PHP 练习(新闻发布)
- rabbitmq 启动报错 Failed to get nic info
- Python中if-else的多种写法
- 网页登入验证码的实现(java&;html)
- Docker学习要点记录
- c# 解析百度图片搜索结果json中objURL图片原始地址