题意:给出n个点,m条路,每条路用5个整数表示u,v,a,b,t

u表示这条路的起点,v表示终点,a表示打开时间,b表示关闭时间,t表示通过这条道路需要的时间

看的紫书,因为边权不再仅仅是路上的时间,还需要处理一下是否需要等待

如果不需要等待的话,这条路上的权值就为t

如果需要等待的话,这条路的权值就为t+wait

再用dijkstra就可以了

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include <cmath>
  5. #include<stack>
  6. #include<vector>
  7. #include<map>
  8. #include<set>
  9. #include<queue>
  10. #include<algorithm>
  11. using namespace std;
  12.  
  13. #define foreach(i,c) for (__typeof(c.begin()) i = c.begin(); i != c.end(); ++i)
  14.  
  15. typedef long long LL;
  16. const int INF = (<<)-;
  17. const int mod=;
  18. const int maxn=;
  19.  
  20. int d[maxn],used[maxn],next[maxn],first[maxn];
  21. int n,m,ecnt,s,t;
  22.  
  23. struct edge{
  24. int v,a,b,t;
  25. } e[maxn];
  26.  
  27. void addedge(int u,int v,int a,int b,int t){
  28. next[++ecnt]=first[u];
  29. e[ecnt].v=v;
  30. e[ecnt].a=a;
  31. e[ecnt].b=b;
  32. e[ecnt].t=t;
  33. first[u]=ecnt;
  34. }
  35.  
  36. void dijkstra(int s){
  37. for(int i=;i<=n;i++) d[i]=INF;
  38. d[s]=;
  39. memset(used,,sizeof(used));
  40.  
  41. for(int k=;k<=n;k++){
  42. int u,m=INF;
  43. for(int i=;i<=n;i++) if(!used[i]&&d[i]<m) m=d[u=i];
  44. used[u]=;
  45. for(int i=first[u];i!=-;i=next[i]){
  46. int v=e[i].v,a=e[i].a,b=e[i].b,t=e[i].t;
  47.  
  48. if(a<t) continue;//打开的时间小于通过的时间
  49.  
  50. int now=d[u]%(a+b);
  51. if(now+t<=a){//现在能够通过的情况下松弛
  52. if(d[v]>d[u]+t) d[v]=d[u]+t;
  53. }
  54. else{
  55. int wait=a+b-now;//现在需要等待的情况下松弛
  56. if(d[v]>d[u]+wait+t) d[v]=d[u]+wait+t;
  57. }
  58. }
  59. }
  60.  
  61. }
  62.  
  63. int main(){
  64. int kase=;
  65. while(scanf("%d %d %d %d",&n,&m,&s,&t)!=EOF){
  66. memset(first,-,sizeof(first));
  67. ecnt=;
  68.  
  69. while(m--){
  70. int u,v,a,b,t;
  71. cin>>u>>v>>a>>b>>t;
  72. addedge(u,v,a,b,t);
  73. }
  74. dijkstra(s);
  75.  
  76. printf("Case %d: ",++kase);
  77. printf("%d\n",d[t]);
  78. }
  79. return ;
  80. }

UVa 12661 Funny Car Racing【 dijkstra 】的更多相关文章

  1. UVa 12661 - Funny Car Racing(Dijkstra)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  2. UVA - 12661 Funny Car Racing (Dijkstra算法)

    题目: 思路: 把时间当做距离利用Dijkstra算法来做这个题. 前提:该结点e.c<=e.a,k = d[v]%(e.a+e.b); 当车在这个点的1处时,如果在第一个a这段时间内能够通过且 ...

  3. 【Dijkstra】

    [摘自]:华山大师兄,推荐他的过程动画~   myth_HG 定义 Dijkstra算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩 ...

  4. uva 10154 - Weights and Measures【dp】qi

    题意:uva 10154 - Weights and Measures 题意:有一些乌龟有一定的体重和力量,求摞起来的最大高度.力量必须承受其上面包含自己的所有的重量. 分析:先按其能举起来的力量从小 ...

  5. UVa - 12661 - Funny Car Racing

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

  6. UVa 12661 Funny Car Racing (dijkstra)

    题意:给定一个有向图,每条路有5个整数修饰,u, v, a, b, t,表示起点为u,终点为v,打开时间a,关闭时间为b,通过时间为t,打开关闭是交替进行的, 问你从s到t最短时间是多少. 析:使用d ...

  7. hdu 1052 Tian Ji -- The Horse Racing【田忌赛马】

    题目 这道题主要是需要考虑到各种情况:先对马的速度进行排序,然后分情况考虑: 1.当田忌最慢的马比国王最慢的马快则赢一局 2.当田忌最快的马比国王最快的马快则赢一局 3.当田忌最快的马比国王最快的马慢 ...

  8. UVa 12661 Funny Car Racing - spfa

    很简单的一道最短路问题.分情况处理赛道的打开和关闭. Code /** * UVa * Problem#12661 * Accepted * Time:50ms */ #include<iost ...

  9. HDU 3790 最短路径问题【Dijkstra】

    题意:给出n个点,m条边,每条边的长度d和花费p,给出起点和终点的最短距离和花费,求最短距离,如果有多个最短距离,输出花费最少的 在用dijkstra求最短距离的时候,再用一个f[]数组保存下最少花费 ...

随机推荐

  1. YII 数据库查询

    $userModel = User::Model(); $userModel->count(); $userModel->count($condition); $userModel-> ...

  2. CodeForces ---596B--Wilbur and Array(贪心模拟)

    Wilbur and Array Time Limit: 2000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Su ...

  3. Oracle RAC集群体系结构

    一. Oracle集群体系结构 Oracle RAC,全称是Oracle Real Application Cluster,即真正的应用集群,是oracle提供的一个并行集群系统,整个集群系统由Ora ...

  4. Struts1、Struts2、Hibernate、Spring框架工作原理介绍

    Struts1工作原理 Struts1工作原理图 1.初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控 ...

  5. MariaDB GALERA 集群双节点部署

    节点1:10.2.2.41 节点2:10.2.2.42 软件: mariadb-galera-10.0.22-linux-x86_64.tar.gz #galera相关参数:(两个节点配置文件类似) ...

  6. double int 类型的区别

    内部组织格式不同: po [NSString stringWithFormat:@"%d", f] 107886912 (lldb) po [NSString stringWith ...

  7. 紫书 例题 10-3 UVa 10375 (唯一分解定理)

    这道题感觉非常的秀 因为结果会很大,所以就质因数分解分开来算 非常的巧妙! #include<cstdio> #include<vector> #include<cstr ...

  8. 【POJ 3714】Raid

    [题目链接]:http://poj.org/problem?id=3714 [题意] 给你两类的点; 各n个; 然后让你求出2*n个点中的最近点对的距离; 这里的距离定义为不同类型的点之间的距离; [ ...

  9. MySql基础总结(1)

    对于MySql已经是第二次看了,这次基本的目的是将MySql系统的归纳一边,之前学MySql是将笔记写在本子上,以后不想总带着本子,所以再花点时间把笔记归纳在博客中. 下午已将安装步骤具体的写了.如今 ...

  10. iOS开发之block解析

    1. block的本质是一个Objective-C的对象,为什么这么说? 在Objective-C中,runtime会在执行时依据对象的isa指针的指向,来度额定这个对象的类型,也能够觉得一个对象,它 ...