练习!!

这里主要需要注意的是进队的条件和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. Python爬虫初学(二)—— 爬百度贴吧

    Python爬虫初学(二)-- 爬百度贴吧 昨天初步接触了爬虫,实现了爬取网络段子并逐条阅读等功能,详见Python爬虫初学(一). 今天准备对百度贴吧下手了,嘿嘿.依然是跟着这个博客学习的,这次仿照 ...

  2. HDU5723 Abandoned country (最小生成树+深搜回溯法)

    Description An abandoned country has n(n≤100000) villages which are numbered from 1 to n. Since aban ...

  3. 二分图最大匹配:匈牙利算法的python实现

    二分图匹配是很常见的算法问题,一般用匈牙利算法解决二分图最大匹配问题,但是目前网上绝大多数都是C/C++实现版本,没有python版本,于是就用python实现了一下深度优先的匈牙利算法,本文使用的是 ...

  4. nmon-监控测试服务器 - Jmeter - 在Linux执行性能测试的方法 [2]

    之所以把标题补充为<Jmeter - 在Linux执行性能测试的方法 [2]>,是因为在执行性能测试的过程中,我们需要关注的对象无非就是"测试服务器", 那么除了使用一些常见的观察服务器的 ...

  5. adb不是内部或外部命令

    1.安卓环境没配好, 2.tools下面没有adb.exe这个程序 3.2.3以后,adb.exe这个程序在platform-tools下而不是在tools下,所有环境变量的tools改成platfo ...

  6. mac制作icns图标

    Key steps:1) Prepare a 1024x1024 png or jpeg file;2) Download fasticns utility to convert the icon t ...

  7. Python 搭建环境踩过的那些坑

    实践出真知,学习 Python 第六天,准备开始尝试写一些 Python 的实例.之前学习过程主要是参照的 廖雪峰老师的教程.搭建环境的过程,被很多坑围绕着. 版本选择 版本选择 Python 3.5 ...

  8. 【Mybatis】配置文件加载属性

    Mybatis将按照下面的顺序来加载属性: 1.在properties文本定义的属性首先被读取, 2.然后读取Mybatis的配置文件sqlConfig.xml配置文件中properties标签属性 ...

  9. openstack配置

    参考林海峰老师的配置教程 http://blog.51cto.com/9161406/1839667

  10. 8.23.4 IO-输入输出16个流

    字节流: FileInputStream FileInputStream fIn = new FileInputStream("1.avi");   FileOutputStrea ...