P4009 汽车加油行驶问题
时间:2019-10-20
本文章向大家介绍P4009 汽车加油行驶问题,主要包括P4009 汽车加油行驶问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题面:https://www.luogu.org/problem/P4009
分层图,建k+1层分别表示满油到没油,然后根据当前点是否有加油站在层间建边即可.
Code:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=200050,M=500050,INF=0x3f3f3f3f;
int n,k,a,b,c,head[N],dis[N],ans=INF,maxn,cnt,nn,inq[N];
struct node{
int next,to,dis;
}G[M*2];
void addedge(int u,int v,int w){
G[++cnt]=(node){head[u],v,w};
head[u]=cnt;
}
void add(int c1,int x1,int y1,int c2,int x2,int y2,int w){
addedge(c1*nn+(x1-1)*n+y1,c2*nn+(x2-1)*n+y2,w);
}
void spfa(){
queue<int> q;
for(int i=1;i<=n;i++){
dis[i]=INF;
}
q.push(0);
inq[0]=1;
while(!q.empty()){
int u=q.front();
q.pop();
inq[u]=0;
for(int i=head[u];i;i=G[i].next){
int v=G[i].to,w=G[i].dis;
if(dis[u]+w<dis[v]){
dis[v]=dis[u]+w;
if(!inq[v]){
inq[v]=1;
q.push(v);
}
}
}
}
}
int main(){
scanf("%d%d%d%d%d",&n,&k,&a,&b,&c);
nn=n*n;
int x;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&x);
if(x==0){
for(int p=0;p<=k-1;p++){
add(p,i,j,k,i,j,a+c);
}
for(int p=1;p<=k;p++){
if(i-1>0){
add(p,i,j,p-1,i-1,j,b);
}
if(j-1>0){
add(p,i,j,p-1,i,j-1,b);
}
if(i+1<=n){
add(p,i,j,p-1,i+1,j,0);
}
if(j+1<=n){
add(p,i,j,p-1,i,j+1,0);
}
}
}
else {
for(int p=0;p<=k-1;p++){
add(p,i,j,k,i,j,a);
}
if(i-1>0){
add(k,i,j,k-1,i-1,j,b);
}
if(j-1>0){
add(k,i,j,k-1,i,j-1,b);
}
if(i+1<=n){
add(k,i,j,k-1,i+1,j,0);
}
if(j+1<=n){
add(k,i,j,k-1,i,j+1,0);
}
}
}
}
addedge(0,k*nn+1,0);
n=nn*(k+1);
spfa();
for(int p=1;p<=k+1;p++){
ans=min(ans,dis[p*nn]);
}
printf("%d\n",ans);
return 0;
}
原文地址:https://www.cnblogs.com/ukcxrtjr/p/11707507.html
- 修复bootstrap daterangepicker中的3个问题
- 搭建AngualarJS开发环境
- CSS魔法堂:重拾Border之——更广阔的遐想
- Jboss EAP:native management API学习
- linux:手动校准系统时间和硬件CMOS时间
- CSS3魔法堂:说说Multi-column Layout
- 数据可视化-EChart2.0使用总结2
- rpc框架之 thrift 学习 2 - 基本概念
- rpc框架之avro 学习 1 - hello world
- 探讨Android中的内置浏览器和Chrome
- java并发编程学习: 阻塞队列 使用 及 实现原理
- CSS魔法堂:说说Float那个被埋没的志向
- Netbeans配置Xdebug
- rpc框架: thrift/avro/protobuf 之maven插件生成java类
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- strstr和strcchr查找字符串和区别
- php获取当前操作系统类型 PHP_OS
- php is_dir 判断是否存在这目录
- php strtoupper 和 array_change_key_case 字符串转大写,小写
- php register_shutdown_function响应error 配合error_get_last 捕获错误
- C# 实现Winform全屏后不遮挡任务栏,显示任务栏
- [TP5填坑]关于助手函数input一不小心取不到get值的解决办法
- 关于nginx为站点绑定域名以及绑定多个域名
- PBMC or 全血,应该选哪个?
- 关于thinkphp5的报错 "mkdir() Permission denied"的解决
- 不同步节点在线使用Remix开发以太坊Dapp及solidity学习入门 ( 一 ):智能合约HelloWorld
- solidity编写eth智能合约之contract 创建合约(二)
- solidity modifier函数修改器 智能合约开发知识浅学(三)
- solidity struct 结构体创建与使用浅学 (四)
- solidity bytes 智能合约开发知识浅学(五点一)bytes基本概念