HDU 6071 - Lazy Running | 2017 Multi-University Training Contest 4
/*
HDU 6071 - Lazy Running [ 建模,最短路 ] | 2017 Multi-University Training Contest 4
题意:
四个点的环,给定相邻两点距离,问从2号点出发,2号点结束,距离大于k的最短距离
d(i,j) < 30000, k <= 1e18
分析:
设 r = min(d(1,2), d(2,3))
假设距离 k 可达,则 k+2*r 也可达(来回走的形式)
故求出所有 d[i][j] 满足 d[i][j]%2r == j 的最短距离
然后对于每一个d[2][j] 求出 d[2][j] + x*(2r) >= k 的第一个数
*/
#include <bits/stdc++.h>
using namespace std;
#define LL long long
const LL INF = (LL)(1e18)+5;
struct qnode {
int v; LL c;
qnode(int v = 0, LL c = 0) : v(v), c(c) {}
bool operator < (const qnode & r) const {
return c > r.c;
}
};
struct Edge {
int v; LL c;
Edge(int v = 0, LL c = 0) : v(v), c(c) {}
};
vector<Edge> edge[5];
bool vis[5][60005];
LL dist[5][60005];
priority_queue<qnode> que;
void Dijkstra(int r)
{
while (!que.empty()) que.pop();
memset(vis, 0, sizeof(vis));
for (int i = 1; i <= 4; i++)
for (int j = 0; j <= r; j++) dist[i][j] = INF;
dist[2][0] = r;
que.push(qnode(2, 0));
while (!que.empty())
{
auto tmp = que.top(); que.pop();
int u = tmp.v;
LL w = tmp.c;
if (vis[u][w%r]) continue;
vis[u][w%r] = 1;
for (const auto& e : edge[u])
{
LL c = w + e.c;
if (!vis[e.v][c%r] && dist[e.v][c%r] > c)
{
dist[e.v][c%r] = c;
que.push(qnode(e.v, c));
}
}
}
}
void addedge(int u, int v, LL w)
{
edge[u].push_back(Edge(v, w));
edge[v].push_back(Edge(u, w));
}
LL k, d[5], r;
int main()
{
int t; scanf("%d", &t);
while (t--)
{
for (int i = 1; i <= 4; i++) edge[i].clear();
scanf("%lld", &k);
for (int i = 1; i <= 4; i++) scanf("%lld", &d[i]);
r = 2*min(d[1], d[2]);
addedge(1, 2, d[1]); addedge(1, 4, d[4]);
addedge(2, 3, d[2]); addedge(3, 4, d[3]);
Dijkstra(r);
LL ans = k+r;
for (int i = 0; i < r; i++)
{
if (dist[2][i] == INF) continue;
if (dist[2][i] >= k)
{
ans = min(ans, dist[2][i]);
}
else
{
LL s = k-dist[2][i];
LL l = ((s-1)/r+1) * r + dist[2][i];
ans = min(ans, l);
}
}
printf("%lld\n", ans);
}
}
HDU 6071 - Lazy Running | 2017 Multi-University Training Contest 4的更多相关文章
- hdu 6071 Lazy Running 最短路建模
Lazy Running Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) P ...
- HDU 6071 Lazy Running (同余最短路 dij)
Lazy Running Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)To ...
- HDU 6071 Lazy Running (同余最短路)
Lazy Running Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)To ...
- HDU 6071 Lazy Running(很牛逼的最短路)
http://acm.hdu.edu.cn/showproblem.php?pid=6071 题意: 1.2.3.4四个点依次形成一个环,现在有个人从2结点出发,每次可以往它相邻的两个结点跑,求最后回 ...
- HDU 6071 Lazy Running(最短路)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6071 [题目大意] 给出四个点1,2,3,4,1和2,2和3,3和4,4和1 之间有路相连, 现在 ...
- HDU 6071 Lazy Running (最短路)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6071 题解 又是一道虐信心的智商题... 首先有一个辅助问题,这道题转化了一波之后就会化成这个问题: ...
- HDU 6170 - Two strings | 2017 ZJUT Multi-University Training 9
/* HDU 6170 - Two strings [ DP ] | 2017 ZJUT Multi-University Training 9 题意: 定义*可以匹配任意长度,.可以匹配任意字符,问 ...
- hdu 6301 Distinct Values (2018 Multi-University Training Contest 1 1004)
Distinct Values Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- hdu 5288 OO’s Sequence(2015 Multi-University Training Contest 1)
OO's Sequence Time Limit: 4000/2000 MS (Jav ...
随机推荐
- [转帖]Kafka 原理和实战
Kafka 原理和实战 https://segmentfault.com/a/1190000020120043 两个小时读完... 实在是看不完... 1.2k 次阅读 · 读完需要 101 分钟 ...
- 使用 Mybatis-plus 进行 crud 操作
1 Mybatis-Plus简介 1.1 什么是Mybatis-Plus MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化 ...
- spring session实现同域下单点登录
Session会话管理 在Web项目开发中,Session会话管理是一个很重要的部分,用于存储与记录用户的状态或相关的数据:通常情况下session交由容器(tomcat)来负责存储和管理,但是如果项 ...
- Java手写简单HashMap一(包括增加,查找,toString,泛型)
@Java 300 学习总结 HashMap底层采用实现采用了哈希表,结合了"数组和链表". 原理如图 一.定义HashMap类. 首先需要定义一个节点来存储数据,构成链表结构. ...
- 【AC自动机】Keywords Search
[题目链接] https://loj.ac/problem/10057 [题意] 原题来自:HDU 2222 给定 n 个长度不超过 50 的由小写英文字母组成的单词准备查询,以及一篇长为 m 的文 ...
- 华为精益敏捷专家:DevOps转型中的那些坑
陈军--原腾讯高级项目经理.华为精益敏捷专家 DevOps是现在非常流行的一个词,很多人都在提DevOps,在往那个方向去转,但转的时候坑特别多. 现实是很理想的,大家都觉得做了DevOps之后就会非 ...
- 使用canal获取mysql的binlog传输给kafka,并交由logstash获取实验步骤
1. 实验环境 CPU:4 内存:8G ip:192.168.0.187 开启iptables防火墙 关闭selinux java >=1.5 使用yum方式安装的java,提前配置好JAVA_ ...
- JS 编程艺术
JS艺术片段剪贴 getFullDate: function (date) { //返回 YYYY年MM月DD日 var year = month = day = ' '; if (isNaN(dat ...
- 使用js输出1000以内的水仙花数
什么是水仙花数 水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI).自恋数.自幂数.阿姆斯壮数或阿姆斯特 ...
- Win Server 2012 配置运行 .net core 环境
今天拿到一台 全新的win 2012 服务器配置服务器环境 记录一下 首先装好IIS 打开服务器管理器 - 添加功能和角色 好 安装完IIS 看一下服务器有没有安装 core的运行环境(全新 ...