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

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

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

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

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

再用dijkstra就可以了

 #include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
using namespace std; #define foreach(i,c) for (__typeof(c.begin()) i = c.begin(); i != c.end(); ++i) typedef long long LL;
const int INF = (<<)-;
const int mod=;
const int maxn=; int d[maxn],used[maxn],next[maxn],first[maxn];
int n,m,ecnt,s,t; struct edge{
int v,a,b,t;
} e[maxn]; void addedge(int u,int v,int a,int b,int t){
next[++ecnt]=first[u];
e[ecnt].v=v;
e[ecnt].a=a;
e[ecnt].b=b;
e[ecnt].t=t;
first[u]=ecnt;
} void dijkstra(int s){
for(int i=;i<=n;i++) d[i]=INF;
d[s]=;
memset(used,,sizeof(used)); for(int k=;k<=n;k++){
int u,m=INF;
for(int i=;i<=n;i++) if(!used[i]&&d[i]<m) m=d[u=i];
used[u]=;
for(int i=first[u];i!=-;i=next[i]){
int v=e[i].v,a=e[i].a,b=e[i].b,t=e[i].t; if(a<t) continue;//打开的时间小于通过的时间 int now=d[u]%(a+b);
if(now+t<=a){//现在能够通过的情况下松弛
if(d[v]>d[u]+t) d[v]=d[u]+t;
}
else{
int wait=a+b-now;//现在需要等待的情况下松弛
if(d[v]>d[u]+wait+t) d[v]=d[u]+wait+t;
}
}
} } int main(){
int kase=;
while(scanf("%d %d %d %d",&n,&m,&s,&t)!=EOF){
memset(first,-,sizeof(first));
ecnt=; while(m--){
int u,v,a,b,t;
cin>>u>>v>>a>>b>>t;
addedge(u,v,a,b,t);
}
dijkstra(s); printf("Case %d: ",++kase);
printf("%d\n",d[t]);
}
return ;
}

最新文章

  1. mysql autocommit=OFF导致wordpress 建立数据库连接时出错
  2. 使用mysqladmin ext了解MySQL运行状态【转】
  3. Spring mvc 下Ajax获取JSON对象问题 406错误
  4. POJ 2464 Brownie Points II (树状数组,难题)
  5. 开启和关闭wifi的代码段
  6. 深入解析spring中用到的九种设计模式
  7. SQL Server 已提交读快照 测试
  8. mac 压缩png图片资源 pngcrush命令
  9. old linkedin profile
  10. Struts2第二天
  11. CAD.NET二次开发 新建图层 删除图层 指定图层颜色以及线形等
  12. Source Insight4
  13. fastjson 序列化,反序列化Map对象的顺序问题
  14. this指向问题,只提供案例,不做任何分析
  15. Python有趣时刻,这些代码让你大呼&quot;卧槽,怎么会这样&quot;
  16. 【原创】python嗅探QQ消息实战
  17. 使用Git Extensions简单入门Git
  18. mybatis-generator使用心得
  19. 22.struts2-拦截器.md
  20. java如何对map进行排序详解(map集合的使用)

热门文章

  1. 为什么不能用memcached存储Session?
  2. legend---十一、thinkphp事务中if($ans1&amp;&amp;$ans2){}else{}方式和try{}catch{}方式事务操作的区别在哪里
  3. HTML与CSS学习记录
  4. POJ 3342 树形DP+Hash
  5. 51nod 1268 和为K的组合 dfs
  6. HTML基础——网站信息显示页面
  7. 解码URLDecode和编码URLEnCode
  8. 如何新建一个空的optix工程
  9. C# 将string 转换为二维码图片,然后转为base64字符串编码 。
  10. Android Studio 开发安卓软件时下载的工程项目 Sync with gradle 失败