【题目链接】 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. 微信小程序开发(三)项目目录及文件结构

    第二章我们已经创建了一个Hello WXapplet示例小程序.我们从文件目录结构来了解Hello WXapplet项目的构成. 目录结构显示,在小程序项目的根目录下面包含3个app开头的文件(app ...

  2. 6.MySQL简介

    MySQL简介 ·点击查看MySQL官方网站 ·MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,后来被Sun公司收购,Sun公司后来又被Oracle公司收购,目前属于facle旗下 ...

  3. VC拷贝字符串到剪切板

    ] ="中华人民共和国"; DWORD dwLength = ; // 要复制的字串长度 HANDLE hGlobalMemory = GlobalAlloc(GHND, dwLe ...

  4. 组合数+逆元 A - Chat Group Gym - 101775A

    题目链接:https://cn.vjudge.net/contest/274151#problem/A 具体思路:我们可以先把所有的情况算出来,为2^n.然后不合法的情况减去就可以了.注意除法的时候要 ...

  5. 安装 Google BBR 加速VPS网络

    Google BBR就是谷歌公司提出的一个开源TCP拥塞控制的算法.详情可以看这儿:https://lwn.net/Articles/701165.https://blog.sometimesnaiv ...

  6. docker安装总结 linux红帽系列

    由于Docker限制分为两个版本CE和EE,所以之前yum里面的docker是老版本,需要先进行卸载,现在的包名叫做docker-ce yum remove docker docker-common ...

  7. 36 - 网络编程-TCP编程

    目录 1 概述 2 TCP/IP协议基础 3 TCP编程 3.1 通信流程 3.2 构建服务端 3.3 构建客户端 3.4 常用方法 3.4.1 makefile方法 3.5 socket交互 3.4 ...

  8. 【转载】WebDriver(C#)之十点使用心得

    使用Selenium WebDriver驱动浏览器测试的过程中多多少少会遇到一些折腾人的问题,总结了一部分,做下分享. 一.隐藏元素处理(element not visible) 使用WebDrive ...

  9. c++各种排序的简单实现

    /* 直插排序 */ void InsertSort(vector<int> &arr){ for(int i = 1;i < arr.size();++i){ for(in ...

  10. uWSGI+Nginx+Flask在Linux下的部署

    搞了一天多,终于搞通了uWSGI的部署原理,下面总结一下遇到的一些坑,希望给读者能够少走弯路.        简单来说,uWSGI是一个web服务器,Nginx进行反向代理的其实跟这些服务器可以说没有 ...