UVA 12661
来源:互联网 发布:万网域名whois 编辑:程序博客网 时间:2024/06/03 19:41
【题目分析】
没什么好说的,就是最短路问题,注意细节
1.计算的时候
2.加边的时候。
【代码】
#include <queue>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define maxn 100005int fr[maxn],to[maxn],open[maxn],close[maxn],ne[maxn],h[maxn],w[maxn],en=0;int n,m,s,t;void add(int a,int b,int c,int d,int e){fr[en]=a;to[en]=b;open[en]=c;close[en]=d;ne[en]=h[a];w[en]=e;h[a]=en++;}int dis[maxn],inq[maxn];int cal(int tim,int k){ int stop=(tim+open[k]+close[k]-1)/(open[k]+close[k])*(open[k]+close[k]); stop-=close[k]; if (tim+w[k]<=stop) return tim+w[k]; return stop+close[k]+w[k];}void SPFA(){ queue <int> q; while (!q.empty()) q.pop(); memset(dis,0x3f,sizeof dis); memset(inq,0,sizeof inq); inq[s]=0;dis[s]=0; q.push(s); int tmp; while (!q.empty()) { int x=q.front();q.pop();inq[x]=0; for (int i=h[x];i>=0;i=ne[i]) { if (dis[to[i]]>(tmp=cal(dis[x],i))) { dis[to[i]]=tmp; if (!inq[to[i]]) { inq[to[i]]=1; q.push(to[i]); } } } }// for (int i=1;i<=n;++i) printf("%d ",dis[i]);// printf("\n");}int main(){ int kas=0; while (scanf("%d%d%d%d",&n,&m,&s,&t)!=EOF) { memset(h,-1,sizeof h);en=0; for (int i=1;i<=m;++i) { int a,b,c,d,e; scanf("%d%d%d%d%d",&a,&b,&c,&d,&e); if (e<=c) add(a,b,c,d,e);// add(b,a,c,d,e); } SPFA(); printf("Case %d: %d\n",++kas,dis[t]); }}
0 0
- UVA 12661
- uva 12661(最短路)
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- 第1.1章 Node应用
- 好用的验证码识别工具类api接口
- 「Deep Learning」Caffe+GTX1080+CUDA8.0+cudnn5.0
- LINUX 命令一 帮助命令 解压命令 文件命令 安装命令
- 网页Request Headers和Response Headers
- UVA 12661
- ffmpeg---命令分组中几个关键结构体的关系
- 这是一篇测试博客,linux服务器搭建
- iOS项目中使用OpenSSL库
- Git代码管理的使用流程
- [Android]安全第三步,ARM寄存器
- caffe训练cnn调参
- Jmter基础(三)--HTTP Request Defaults(HTTP的默认值)
- 接口测试总结