【题目链接】 http://acm.hdu.edu.cn/showproblem.php?pid=6071

【题目大意】

  给出四个点1,2,3,4,1和2,2和3,3和4,4和1 之间有路相连,
  现在从2点出发,最后回到2点,要求路径大于等于K,问路径长度最短是多少

【题解】

  取一条与2相连的权值最小的边w。
  若存在一条从起点到终点的长度为k的路径,
  那么必然存在一条长度为k+2w的路径,只要一开始在那条边上往返走就好了。
  设dij表示从起点到i,路径长度模2w为j时,路径长度的最小值。
  用最短路算法求出所有dij,然后检查d[n][k%2w]是否不超过k即可。
  对于求大于等于k的最小解,只要枚举W解不等式即可。

【代码】

#include <cstdio>
#include <cstring>
#include <queue>
#include <utility>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N=1000010;
const LL INF=0x3f3f3f3f3f3f3f3f;
typedef pair<LL,int>seg;
priority_queue<seg,vector<seg>,greater<seg> >q;
int head[N],u[N],v[N],w[N],nxt[N],n,m,ed=0;
LL d[5][N],W;
void add(int a,int b,int c){
u[++ed]=a,v[ed]=b,w[ed]=c;
nxt[ed]=head[u[ed]]; head[u[ed]]=ed;
}
void Dijkstra(int src){
for(int i=0;i<=n;i++)for(int j=0;j<W;j++)d[i][j]=INF;
q.push(make_pair(0,src));
while(!q.empty()){
seg now=q.top(); q.pop();
LL _w=now.first;
int x=now.second;
if(_w>d[x][_w%W])continue;
for(int e=head[x];e!=-1;e=nxt[e]){
LL nw=_w+w[e];
if(d[v[e]][nw%W]>nw){
d[v[e]][nw%W]=nw;
q.push(make_pair(nw,v[e]));
}
}
}
}
int T;
LL k,d1,d2,d3,d4;
int main(){
scanf("%d",&T); n=4;
while(T--){
LL ans=INF;
memset(head,-1,sizeof(head));ed=0;
scanf("%lld%lld%lld%lld%lld",&k,&d1,&d2,&d3,&d4);
if(d2<d1)W=2*d2; else W=2*d1;
add(3,4,d3); add(4,3,d3);
add(2,1,d1); add(1,2,d1);
add(2,3,d2); add(3,2,d2);
add(1,4,d4); add(4,1,d4);
Dijkstra(2);
for(int i=0;i<W;i++){
if(k<=d[2][i])ans=min(ans,d[2][i]);
else ans=min(ans,d[2][i]+((k-d[2][i]+W-1)/W)*W);
}printf("%lld\n",ans);
}return 0;
}

HDU 6071 Lazy Running(最短路)的更多相关文章

  1. hdu 6071 Lazy Running 最短路建模

    Lazy Running Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) P ...

  2. HDU 6071 Lazy Running (最短路)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6071 题解 又是一道虐信心的智商题... 首先有一个辅助问题,这道题转化了一波之后就会化成这个问题: ...

  3. HDU 6071 - Lazy Running | 2017 Multi-University Training Contest 4

    /* HDU 6071 - Lazy Running [ 建模,最短路 ] | 2017 Multi-University Training Contest 4 题意: 四个点的环,给定相邻两点距离, ...

  4. HDU 6071 Lazy Running (同余最短路 dij)

    Lazy Running Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)To ...

  5. HDU 6071 Lazy Running (同余最短路)

    Lazy Running Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)To ...

  6. HDU 6071 Lazy Running(很牛逼的最短路)

    http://acm.hdu.edu.cn/showproblem.php?pid=6071 题意: 1.2.3.4四个点依次形成一个环,现在有个人从2结点出发,每次可以往它相邻的两个结点跑,求最后回 ...

  7. 多校4 lazy running (最短路)

    lazy running(最短路) 题意: 一个环上有四个点,从点2出发回到起点,走过的距离不小于K的最短距离是多少 \(K <= 10^{18} 1 <= d <= 30000\) ...

  8. HDU 6071 同余最短路 spfa

    Lazy Running Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)To ...

  9. 2017 Multi-University Training Contest - Team 4 hdu6071 Lazy Running

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6071 题目: Lazy Running Time Limit: 2000/1000 MS (J ...

随机推荐

  1. Linux终端提示符PS1设置(颜色)

    \d :代表日期,格式为weekday month date,例如:"Mon Aug 1"\H :完整的主机名称.例如:我的机器名称为:fc4.linux,则这个名称就是fc4.l ...

  2. Deep Learning基础--SVD奇异值分解

    矩阵奇异值的物理意义是什么?如何更好地理解奇异值分解?下面我们用图片的例子来扼要分析. 矩阵的奇异值是一个数学意义上的概念,一般是由奇异值分解(Singular Value Decomposition ...

  3. 从LabVIEW到C++

    前言 最近一段时间一直没有更新,一方面是时间精力的问题(PS:懒癌犯了),另一方面是小黑大部分的时间都在学习C++相关知识,恶补了许多的知识(从大学C语言水平强制拔高了一段). 本文谈谈自己近期的一些 ...

  4. Dev Express 安装

    Dev Express 安装 点击DevExpressUniversalTrialComplete-20151209.exe开始安装 选择需要安装的产品   选择需要安装的产品目录,这里设置为D盘 开 ...

  5. shell中的变量与eval(转)

    原文链接:http://www.361way.com/shell-eval-variable/4957.html shell 中经常会用到变量的嵌套的情况.比如,单个或多个变量的值作为变量名,再对该变 ...

  6. ASP.NET Core 2.0 MVC 发布部署--------- SUSE 16 Linux Enterprise Server 12 SP2 X64 具体操作

    .Net Core 部署到 SUSE 16 Linux Enterprise Server 12 SP2 64 位中的步骤 1.安装工具 1.apache 2..Net Core(dotnet-sdk ...

  7. Ecshop二次开发修改

    所有的错误,根据下面这个帖子修改 http://bg.artuion.com/328.html 修改错误: 第300行 原有内容: //return preg_replace("/{([^\ ...

  8. LeetCode301. Remove Invalid Parentheses

    Remove the minimum number of invalid parentheses in order to make the input string valid. Return all ...

  9. Windows内核执行体对象管理器的操作过程与分析

    我之前写过一个有关于对象管理的读书笔记.但是这篇文章与前面的不同,这是我个人对对象管理器到底是什么的一个分析,而且也是直接对WRK代码进行的阅读. 执行体对象即我们通常所言的内核对象,我们知道Wind ...

  10. ros nodelet 使用

    ros nodelet能够加快高吞吐量程序运行速度比如点云 基本入门程序可以看 http://wiki.ros.org/nodelet/Tutorials/Porting%20nodes%20to%2 ...