题目大意:n个点m条边的有向图,q次询问c,s,t,表示汽车邮箱容量为c,求从起点s到终点t的最小费用。汽车在每个点可以加任意的油,每个点的单位油价为a[i]。

题目思路:利用最小费优先队列优化最短路,dist[u][use]代表到达u节点,剩余use单位汽油的花费值。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#define MAXSIZE 1015
#define INF 0x3f3f3f3f
#define LL long long using namespace std; typedef pair<int,int>p;
typedef pair<p,int>pp; int dist[MAXSIZE][],val[],a[*MAXSIZE],k; struct node
{
int u;
int v;
int w;
int next;
} G[*MAXSIZE]; void Add(int u,int v,int w)
{
G[k].u=u;
G[k].v=v;
G[k].w=w;
G[k].next=a[u];
a[u]=k++;
} int spfa(int s,int t,int c)
{
memset(dist,INF,sizeof(dist));
priority_queue<pp,vector<pp>,greater<pp> >Q;
dist[s][]=;
Q.push(pp(p(dist[s][],),s)); // 按优先级顺序入队
while(!Q.empty())
{
pp k=Q.top();
Q.pop();
int w=k.first.first; //已花费的钱
int use=k.first.second; //剩余油量
int u=k.second; //当前节点
if(w > dist[u][use])
continue;
if(u==t) //最小费优先
return dist[u][use];
for(int i=a[u]; i!=-; i=G[i].next)
{
int v=G[i].v;
if(G[i].w > c)
continue;
if(use >= G[i].w && dist[v][use - G[i].w] > dist[u][use]) //当前剩余油量足够到达v
{
dist[v][use - G[i].w] = dist[u][use];
Q.push(pp(p(dist[v][use - G[i].w],use - G[i].w),v));
} }
if(use < c)//当前油量不足以到达下一个点,就向邮箱里加1个单位的汽油
{
dist[u][use+] = dist[u][use] + val[u];
Q.push(pp(p(dist[u][use+],use+),u));
}
}
return INF;
} void Init()
{
memset(a,-,sizeof(a));
k=;
} int main()
{
int T,n,m,c,s,t,u,v,w,cns=;
scanf("%d",&T);
while(T--)
{
Init();
scanf("%d%d",&n,&m);
for(int i=; i<n; i++)
scanf("%d",&val[i]);
for(int i=; i<=m; i++)
{
scanf("%d%d%d",&u,&v,&w);
Add(u,v,w);
Add(v,u,w);
}
scanf("%d",&m);
printf("Case %d:\n",cns++);
while(m--)
{
memset(dist,INF,sizeof(dist));
scanf("%d%d%d",&c,&s,&t);
int ans=spfa(s,t,c);
if(ans != INF)
printf("%d\n",ans);
else
printf("impossible\n");
}
}
return ;
}

light oj 1254 - Prison Break 最短路的更多相关文章

  1. 1254 - Prison Break

    1254 - Prison Break   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Mic ...

  2. Light OJ 1316 A Wedding Party 最短路+状态压缩DP

    题目来源:Light OJ 1316 1316 - A Wedding Party 题意:和HDU 4284 差点儿相同 有一些商店 从起点到终点在走过尽量多商店的情况下求最短路 思路:首先预处理每两 ...

  3. hdu 3681 Prison Break (TSP问题)

    Prison Break Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  4. Light OJ 1429 Assassin`s Creed (II) BFS+缩点+最小路径覆盖

    题目来源:Light OJ 1429 Assassin`s Creed (II) 题意:最少几个人走全然图 能够反复走 有向图 思路:假设是DAG图而且每一个点不能反复走 那么就是裸的最小路径覆盖 如 ...

  5. Light OJ 1406 Assassin`s Creed 减少国家DP+支撑点甚至通缩+最小路径覆盖

    标题来源:problem=1406">Light OJ 1406 Assassin`s Creed 意甲冠军:向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路: ...

  6. Prison Break

    Prison Break 时间限制: 1 Sec  内存限制: 128 MB提交: 105  解决: 16[提交][状态][讨论版] 题目描述 Scofild又要策划一次越狱行动,和上次一样,他已经掌 ...

  7. Light OJ 1406 Assassin`s Creed 状态压缩DP+强连通缩点+最小路径覆盖

    题目来源:Light OJ 1406 Assassin`s Creed 题意:有向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路:最少的的人能够走全然图 明显是最小路径覆盖问题 ...

  8. Light OJ 1288 Subsets Forming Perfect Squares 高斯消元求矩阵的秩

    题目来源:Light OJ 1288 Subsets Forming Perfect Squares 题意:给你n个数 选出一些数 他们的乘积是全然平方数 求有多少种方案 思路:每一个数分解因子 每隔 ...

  9. Light OJ 1272 Maximum Subset Sum 高斯消元 最大XOR值

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u011686226/article/details/32337735 题目来源:problem=12 ...

随机推荐

  1. 点赞功能与redis的相遇

    https://www.jianshu.com/p/2ab76d5bde71 或者 https://kikoroc.com/2016/06/07/dev-like-function-with-redi ...

  2. Java 引用数据类型

    引用数据类型 * A: 数据类型 * a: java中的数据类型分为:基本类型和引用类型 * B: 引用类型的分类 * a: Java为我们提供好的类,比如说:Scanner,Random等. * C ...

  3. 安装pycrypto2.6.1报错

    C:\Users\xxx\Downloads\pycrypto-2.6.1\pycrypto-2.6.1>python setup.py install running install runn ...

  4. 2017-12-15python全栈9期第二天第四节之格式化输出%s和用户交互个人简历模板

    #!/user/bin/python# -*- coding:utf-8 -*-name = input('姓名:')age = input('年龄:')job = input('工作:')hobbi ...

  5. 2017-12-14python全栈9期第一天第五节之变量、常量、注释

    6,变量. 变量:就是将一些运算的中间结果暂存到内存中,以便后续代码调用. 1,必须由数字,字母,下划线任意组合,且不能数字开头. 2,不能是python中的关键字. ['and', 'as', 'a ...

  6. 基于python调用libvirt API

    基于python调用libvirt API 1.程序代码 #!/usr/bin/python import libvirt import sys def createConnection(): con ...

  7. 解决Windows某一应用窗口一直置顶

    ------------------------------ 解决Chrome 窗口一直置顶问题 Ctrl + Alt + Esc ------------------------------

  8. NameNode 与 SecondaryNameNode 的工作机制

    一.NameNode.Fsimage .Edits 和 SecondaryNameNode 概述 NameNode:在内存中储存 HDFS 文件的元数据信息(目录) 如果节点故障或断电,存在内存中的数 ...

  9. OpenStack配置串口显示虚机界面

    OpenStack配置串口显示虚机界面 OpenStack的horizon能够显示虚拟机的界面.horizon是web界面,在我们的电脑上,姑且称之为本地,虚拟机运行在远端服务器上,称之为远端.本地显 ...

  10. vue实现商品累计效果

    vue实现商品累计需要以下几点 1.添加商品 2.选中 3.删除功能 4.总计功能 <div id="main"> <div class="con&qu ...