UVA 12661 Funny Car Racing 有趣的赛车比赛(最短路,变形)
2015-07-16 17:08
621 查看
题意:赛道有n个交叉点,和m条单向路径(有重边),每条路都是周期性关闭的,且通过仍需一段时间。在比赛开始时,所有道路刚好打开,选择进入该道路必须满足“在打开的时间段进入,在关闭之前出来”,即不可在路上逗留,但是可以在交叉点逗留。问到达终点的时间要多少?
思路:最短路,而且正权,用Dijkstra+优先队列够了。主要的难点在计算是否可以进入该路段,画图清晰点。
AC代码
思路:最短路,而且正权,用Dijkstra+优先队列够了。主要的难点在计算是否可以进入该路段,画图清晰点。
#include <bits/stdc++.h> #define LL long long #define pii pair<int,int> #define INF 0x7f7f7f7f using namespace std; const int N=50000+100; vector<int> vect[320]; struct node { int from; int to; int a; int b; int len; }edge ; int edge_cnt; void add_node(int u,int v,int a,int b,int t) { edge[edge_cnt].from=u; edge[edge_cnt].to=v; edge[edge_cnt].a=a; edge[edge_cnt].b=b; edge[edge_cnt].len=t; vect[u].push_back(edge_cnt++); } int dis[320]; bool vis[320]; int Dijkstra(int s,int e) { memset(vis,0,sizeof(vis)); memset(dis,0x7f,sizeof(dis)); priority_queue<pii, vector<pii>, greater<pii> > que; que.push(make_pair(0,s)); dis[s]=0; while(!que.empty()) //每次用一个点来更新别人 { int x=que.top().second; que.pop(); if(vis[x]) continue; //遍历过 vis[x]=1; for(int i=0; i<vect[x].size(); i++) { node e=edge[vect[x][i]]; if( dis[x]%(e.a+e.b)+e.len<=e.a && dis[e.to]>dis[x]+e.len ) //在可通过时间段 { dis[e.to]=dis[x]+e.len; que.push(make_pair(dis[e.to],e.to)); } else if( dis[e.to]>dis[x]+e.len+ (e.a+e.b-dis[x]%(e.a+e.b)) ) //要等待 { dis[e.to]=dis[x]+e.len+ (e.a+e.b-dis[x]%(e.a+e.b)) ; que.push(make_pair(dis[e.to],e.to)); } } } return dis[e]; } int main() { freopen("input.txt", "r", stdin); int n, m, s, t, u, v, a, b, tt, j=0; while(~scanf("%d%d%d%d",&n,&m,&s,&t)) { for(int i=0; i<=n; i++) vect[i].clear(); memset(edge,0,sizeof(edge)); edge_cnt=0; for(int i=0; i<m; i++) { scanf("%d %d %d %d %d", &u, &v, &a, &b, &tt ); if(a>=tt) add_node(u, v, a, b, tt);//去掉废路 } printf("Case %d: %d\n", ++j, Dijkstra(s,t)); } return 0; }
AC代码
相关文章推荐
- 开发指南专题4:JEECG高速微云开发平台--JEECG开发环境的搭建
- php删除数值中重复value,只留其一
- javascript图片预加载实例分析
- linux单、双网卡配置以及配错
- treap之一
- bzoj3527: [Zjoi2014]力
- lua和c的交互
- java--获取指定时间与现在时间的差值
- Android视频通话Java代码
- hibernate 回调机制
- 多线程应用(二)
- java 接口与抽象类
- 兔子-RadioButton和RadioGroup的关系
- 关于遍历图或树,求结果组的问题。
- 【原创IOS开发】swift使用SDWebImages
- jQuery过滤选择器(first,last/:eq()/:contains()/:has()/:hidden/:visible)
- linux虚拟机的scsi设备id与盘符不一致问题的解决
- linux虚拟机的scsi设备id与盘符不一致问题的解决
- 解决Xcode的MainStoryboard对齐不正确的问题
- 兔子--CheckBox与Radiobutton的区别