传送门:点击打开链接

题意:给你有向图,每条边呈周期性开放,即开放a时间,再关闭b时间。再开放a时间以此类推

假设时间不足以穿过这条路则不能走。你能够在节点等待时间,问从s走到t所须要的最小时间

细致想一想这题。对于某条边。越早走到u点一定是最优的,大不了我就等时间嘛

所以,这仅仅是一个普通的dijistra然后略微在每一条边的距离上做了点手脚而已

在节点等待时间。我们能够觉得是某一条路的长度添加了,所以仅仅要在读取边长度的时候,略微处理一下等待时间。就能够了

须要注意的地方:

1.假设开放时间小于边的长度,这条边是不管如何都不能通过的。所以一開始就不能把这条边加入进去

2.假设到达某一点时,这条边是开放的。可是剩下的开放时间已经不足以通过这条边,那么要等到关闭后。又一次开放时。才干通过

#include<map>
#include<set>
#include<cmath>
#include<stack>
#include<queue>
#include<cstdio>
#include<string>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
#define FIN freopen("input.txt","r",stdin)
#define FOUT freopen("output.txt","w+",stdout) using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<LL, int> PLI; const int MX = 1e5 + 5;
const int INF = 0x3f3f3f3f; int Head[MX], Next[MX], rear; struct Edge {
int u, v, cost, a, b;
} E[MX]; void edge_init() {
rear = 0;
memset(Head, -1, sizeof(Head));
} void edge_add(int u, int v, int cost, int a, int b) {
E[rear].u = u;
E[rear].v = v;
E[rear].cost = cost;
E[rear].a = a;
E[rear].b = b;
Next[rear] = Head[u];
Head[u] = rear++;
} LL d[MX];
void dijistra(int Begin) {
memset(d, INF, sizeof(d));
d[Begin] = 0; priority_queue<PLI, vector<PLI>, greater<PLI> >work;
work.push(PLI(0, Begin)); while(!work.empty()) {
PLI f = work.top();
work.pop(); LL dist = f.first;
int u = f.second; for(int id = Head[u]; ~id; id = Next[id]) {
int tq = E[id].a + E[id].b, time = dist % tq, add = 0;
if(time > E[id].a || time + E[id].cost > E[id].a) add = tq - time; int cost = E[id].cost + add, v = E[id].v;
if(dist + cost < d[v]) {
d[v] = dist + cost;
work.push(PLI(dist + cost, v));
}
}
}
} int main() {
int n, m, s, t, ansk = 0; //FIN;
while(~scanf("%d%d%d%d", &n, &m, &s, &t)) {
edge_init();
for(int i = 1; i <= m; i++) {
int u, v, a, b, cost;
scanf("%d%d%d%d%d", &u, &v, &a, &b, &cost);
if(a >= cost) edge_add(u, v, cost, a, b);
}
dijistra(s); printf("Case %d: %lld\n", ++ansk, d[t]);
}
return 0;
}

最短路 uva12661 Funny Car Racing的更多相关文章

  1. UVA-12661 Funny Car Racing (dijkstra)

    题目大意:一张有向图,问从起点到终点的最快时间.不过边有点特殊,从u到v的边没开放a秒就关闭b秒. 题目分析:dijkstra算法即可.在从u走到v的时候要注意一下时间. 代码如下: # includ ...

  2. Funny Car Racing(最短路变形)

    描述 There is a funny car racing in a city with n junctions and m directed roads. The funny part is: e ...

  3. CSU 1333 Funny Car Racing (最短路)

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1333 解题报告:一个图里面有n个点和m条单向边,注意是单向边,然后每条路开a秒关闭b秒 ...

  4. UVA 12661 Funny Car Racing 有趣的赛车比赛(最短路,变形)

    题意:赛道有n个交叉点,和m条单向路径(有重边),每条路都是周期性关闭的,且通过仍需一段时间.在比赛开始时,所有道路刚好打开,选择进入该道路必须满足“在打开的时间段进入,在关闭之前出来”,即不可在路上 ...

  5. 洛谷 题解 UVA12661 【有趣的赛车比赛 Funny Car Racing】

    [题意] 在一个赛车比赛中,赛道有\(n(n<=300)\)个交叉点和\(m(m<=50000)\)条单向道路.有趣的是,每条道路都是周期性关闭的.每条道路用5个整数\(u,v,a,b,t ...

  6. UVa 12661 (单源最短路) Funny Car Racing

    题意: 有一个赛车跑道,可以看做一个加权有向图.每个跑道(有向边)还有一个特点就是,会周期性地打开a秒,然后关闭b秒.只有在赛车进入一直到出来,该跑道一直处于打开状态,赛车才能通过. 开始时所有跑道处 ...

  7. UVa - 12661 - Funny Car Racing

    先上题目: 12661 Funny Car RacingThere is a funny car racing in a city with n junctions and m directed ro ...

  8. bzoj1001--最大流转最短路

    http://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路:这应该算是经典的最大流求最小割吧.不过题目中n,m<=1000,用最大流会TLE, ...

  9. 【USACO 3.2】Sweet Butter(最短路)

    题意 一个联通图里给定若干个点,求他们到某点距离之和的最小值. 题解 枚举到的某点,然后优先队列优化的dijkstra求最短路,把给定的点到其的最短路加起来,更新最小值.复杂度是\(O(NElogE) ...

随机推荐

  1. SPOJ QTREE Query on a tree VI

    You are given a tree (an acyclic undirected connected graph) with n nodes. The tree nodes are number ...

  2. 洛谷 P1262 间谍网络==Codevs 4093 EZ的间谍网络

    4093 EZ的间谍网络 时间限制: 10 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B ...

  3. hdu 3518 Boring counting 后缀数组 height分组

    题目链接 题意 对于给定的字符串,求有多少个 不重叠的子串 出现次数 \(\geq 2\). 思路 枚举子串长度 \(len\),以此作为分界值来对 \(height\) 值进行划分. 显然,对于每一 ...

  4. TCMalloc小记【转】

    转自:http://blog.csdn.net/chosen0ne/article/details/9338591 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 一 原理 二 ...

  5. android中与Adapter相关的控件----ViewFlipper

    ViewFlipper(翻转视图) 一.ViewFlipper是一个多页面管理的控件,与ViewPager不同,ViewPager的是一页一页的的,而ViewFlipper则是一层一层的.图片轮播或者 ...

  6. why not ovp protection ?

    HW MSM8917 PM8937 PMI8940 Question : Recently, I connect usb cable with 10V to the phone. Why does t ...

  7. C++学习(一):现代C++尝试

    C++是一门与时俱进的语言. 早期的C++关注的主要问题是通用性,却没有太多关注易用性的问题,使得C++成为了一门多范式语言,但是使用门槛较高. 从2011开始,C++的标准进行了较大的更新,开始更多 ...

  8. 洛谷——P1617 爱与愁的一千个伤心的理由

    P1617 爱与愁的一千个伤心的理由 题目背景 (本道题目隐藏了两首歌名,找找看哪~~~) <爱与愁的故事第一弹·heartache>第二章. 经历了心痛后,爱与愁大神不行了. 题目描述 ...

  9. JAVA基础之集合、Iterator迭代器、泛型及增强for循环

    个人理解: 对于集合,首先要明确的是最顶层的接口是Collection接口类,其包含一些基本的方法以便子类调用,不过在定义的时候最好定义好数据类型,以免遍历时还得必须进行向上转型:特别注意的是其没有关 ...

  10. 洛谷2085最小函数值(minval) + 洛谷1631序列合并

    题目描述 有n个函数,分别为F1,F2,-,Fn.定义Fi(x)=Ai*x^2+Bi*x+Ci (x∈N*).给定这些Ai.Bi和Ci,请求出所有函数的所有函数值中最小的m个(如有重复的要输出多个). ...