UVa 12661 Funny Car Racing【 dijkstra 】
2024-08-31 12:53:13
题意:给出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 ;
}
最新文章
- mysql autocommit=OFF导致wordpress 建立数据库连接时出错
- 使用mysqladmin ext了解MySQL运行状态【转】
- Spring mvc 下Ajax获取JSON对象问题 406错误
- POJ 2464 Brownie Points II (树状数组,难题)
- 开启和关闭wifi的代码段
- 深入解析spring中用到的九种设计模式
- SQL Server 已提交读快照 测试
- mac 压缩png图片资源 pngcrush命令
- old linkedin profile
- Struts2第二天
- CAD.NET二次开发 新建图层 删除图层 指定图层颜色以及线形等
- Source Insight4
- fastjson 序列化,反序列化Map对象的顺序问题
- this指向问题,只提供案例,不做任何分析
- Python有趣时刻,这些代码让你大呼";卧槽,怎么会这样";
- 【原创】python嗅探QQ消息实战
- 使用Git Extensions简单入门Git
- mybatis-generator使用心得
- 22.struts2-拦截器.md
- java如何对map进行排序详解(map集合的使用)
热门文章
- 为什么不能用memcached存储Session?
- legend---十一、thinkphp事务中if($ans1&;&;$ans2){}else{}方式和try{}catch{}方式事务操作的区别在哪里
- HTML与CSS学习记录
- POJ 3342 树形DP+Hash
- 51nod 1268 和为K的组合 dfs
- HTML基础——网站信息显示页面
- 解码URLDecode和编码URLEnCode
- 如何新建一个空的optix工程
- C# 将string 转换为二维码图片,然后转为base64字符串编码 。
- Android Studio 开发安卓软件时下载的工程项目 Sync with gradle 失败