练习!!

这里主要需要注意的是进队的条件和dp[][]状态的控制,dp[i][j]表示到第i个城市剩余汽油为j的最小花费。

代码:

#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
#define inf 100000000
#define MAXN 1200
#define MAXM 1200
using namespace std; int head[MAXN],price[MAXN],dp[MAXN][120],vis[MAXN][120]; int temp,n,m; struct Node{
int v,len,next;
}edge[2*MAXN*10]; struct Node1{
int d;
int u;
int cost;
Node1(int x,int y,int z)
{
u=x;
d=y;
cost=z;
}
friend bool operator < (Node1 a,Node1 b)
{
return a.cost>b.cost;
}
};
void addEdge(int x ,int y ,int c)
{
edge[temp].v=x;
edge[temp].len=c;
edge[temp].next=head[y];
head[y]=temp;
temp++; edge[temp].v=y;
edge[temp].len=c;
edge[temp].next=head[x];
head[x]=temp;
temp++;
} priority_queue<Node1> que; int Dijstra(int s,int t,int c)
{
while(!que.empty())que.pop();
for(int i=0;i<=n;i++)
{
for(int j=0;j<=c;j++)
{
dp[i][j]=inf;
}
}
memset(vis,0,sizeof(vis));
dp[s][0]=0;
que.push(Node1(s,0,0)); while(!que.empty())
{
Node1 b=que.top();
que.pop();
int u=b.u;
int d=b.d;
int cost=b.cost;
vis[u][d]=1;
if(u==t) return cost; if(d+1<=c&&!vis[u][d+1]&&dp[u][d+1]>dp[u][d]+price[u])
{
dp[u][d+1]=dp[u][d]+price[u];
que.push(Node1(u,d+1,dp[u][d+1]));
}
for(int i=head[u];i!=-1;i=edge[i].next)
{
int v;
v=edge[i].v;
int len=edge[i].len;
if(d>=len&&!vis[v][d-len]&&dp[v][d-len]>cost)
{
dp[v][d-len]=cost;
que.push(Node1(v,d-len,cost));
}
}
}
return -1;
} int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{ for(int i=0;i<n;i++)
{
scanf("%d",&price[i]);
}
memset(head,-1,sizeof(head));
temp=0;
for(int i=1;i<=m;i++)
{
int v,w,c;
scanf("%d%d%d",&v,&w,&c);
addEdge(v,w,c);
} int q;
scanf("%d",&q); while(q--)
{
int q1,q2,q3;
scanf("%d%d%d",&q1,&q2,&q3);
int ans=Dijstra(q2,q3,q1);
if(ans!=-1)
{
printf("%d\n",ans);
}
else
printf("impossible\n");
}
}
return 0;
}

poj 3635 带花费的Dij+head优化的更多相关文章

  1. POJ 3635 - Full Tank? - [最短路变形][手写二叉堆优化Dijkstra][配对堆优化Dijkstra]

    题目链接:http://poj.org/problem?id=3635 题意题解等均参考:POJ 3635 - Full Tank? - [最短路变形][优先队列优化Dijkstra]. 一些口胡: ...

  2. POJ 3635 Full Tank? 【分层图/最短路dp】

    任意门:http://poj.org/problem?id=3635 Full Tank? Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

  3. codeforces 449B Jzzhu and Cities (Dij+堆优化)

    输入一个无向图<V,E>    V<=1e5, E<=3e5 现在另外给k条边(u=1,v=s[k],w=y[k]) 问在不影响从结点1出发到所有结点的最短路的前提下,最多可以 ...

  4. poj 3635 Full Tank? ( bfs+dp思想 )

    Full Tank? Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5857   Accepted: 1920 Descri ...

  5. dij+堆优化

    写这个dij+堆优化的原因是有些地方卡SPFA,只能搞这个: 香甜的奶油: #include<iostream> #include<cstdio> #include<cs ...

  6. POJ 3635 - Full Tank? - [最短路变形][优先队列优化Dijkstra]

    题目链接:http://poj.org/problem?id=3635 Description After going through the receipts from your car trip ...

  7. poj 3013 Big Christmas Tree (dij+优先级队列优化 求最短)

    模板 意甲冠军:给你一个图,1始终根,每一方都有单价值,每个点都有权重新. 每个边缘的价格值 = sum(后继结点重)*单价方值. 最低价格要求树值,它构成了一棵树n-1条边的最小价值. 算法: 1. ...

  8. POJ 3171.Cleaning Shifts-区间覆盖最小花费-dp+线段树优化(单点更新、区间查询最值)

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4721   Accepted: 1593 D ...

  9. poj 1125 Stockbroker Grapevine (dij优化 0ms)

    #include<iostream> #include<cstdio> #include<cstring> #include<queue> #defin ...

随机推荐

  1. 微信小程序开发

    一.基本的准备工作 1.工具安装 工具是有微信官方提供. 2.下载地址: windows32位:https://servicewechat.com/wxa-dev-logic/download_red ...

  2. mybatis 详解(四)------properties以及别名定义

    上一篇博客我们介绍了mybatis的增删改查入门实例,我们发现在 mybatis-configuration.xml 的配置文件中,对数据库的配置都是硬编码在这个xml文件中,如下图,那么我们如何改进 ...

  3. 从.net到java,记录下这三个月的工作

    从事.NET开发已经4个年头,经过十余个项目的学习与沉淀,终于有了一套自己熟悉并且相对完善的技术体系,面对未知,不再惧怕.期间完成并广泛用于公司项目的作品包括: abp的二次开发框架BodeAbp 基 ...

  4. <Mastering KVM Virtualization>:第一章 了解Linux虚拟化

    本章为读者提供了Linux虚拟化中流行技术的深刻见解,以及相较于其他同类技术的优势特点.本书共有14章,囊括了KVM虚拟化中的各个方面,从KVM的内部构造开始,并包括了诸如软件定义网络(SDN),性能 ...

  5. ABP:在多语句事务内不允许使用 CREATE DATABASE 语句

    一.问题 使用ef codefirst开发,无法创建数据库的问题,如下提示 Server Error in '/' Application. 在多语句事务内不允许使用 CREATE DATABASE ...

  6. 6.linux下部署 web 项目

    安装java 1.下载 linux 环境的jdk 2.上传该压缩包到 linux 系统中并且解压 tar -zxvf 压缩包名 3.配置环境变量并且刷新配置 export JAVA_HOME=/ali ...

  7. Xmemcached学习笔记

    memcached有三种java客户端 第一种:Com.danga 包下面的memcached,需引入jar(本人用的是memcached-2.5.2.jar 文末附上附件需要的可以下载) 第二种:s ...

  8. 使用postgre数据库实现树形结构表的子-父级迭代查询,通过级联菜单简单举例

    前言:开发常用的关系型数据库MySQL,mssql,postgre,Oracle,简单的增删改查的SQL语句都与标准SQL兼容,这个不用讲,那么对于迭代查询(不严格的叫法:递归查询)每种数据库都不一样 ...

  9. 关于JS递归函数细化认识及实用实例

    程序调用自身的编程技巧称为递归( recursion). 一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归 ...

  10. SQL基本之增删查改操作

    1.为表添加主键 alter table <tablename> add primary key(col); 主键添加前: 主键添加后: 2.插入数据 insert into <ta ...