hdu3790(双关键字最短路)
来源:互联网 发布:js设置文本框不可编辑 编辑:程序博客网 时间:2024/05/16 10:25
链接:点击打开链接
题意:给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。
代码:
#include <queue>#include <vector>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;const int INF=0x3f3f3f3f;int n,m;int d1[1005],d2[1005],vis[1005];struct node{ int to,val,cos;};vector<node> G[1005];void spfa(int S){ int i,j,u,v,w,p; queue<int> qu; memset(d1,INF,sizeof(d1)); memset(d2,INF,sizeof(d2)); memset(vis,0,sizeof(vis)); d1[S]=d2[S]=0; qu.push(S); while(qu.size()){ u=qu.front(); qu.pop(); vis[u]=0; for(i=0;i<G[u].size();i++){ v=G[u][i].to; w=G[u][i].val; p=G[u][i].cos; if(d1[v]>=d1[u]+w){ //路径相同时再更新花费 if(d1[v]==d1[u]+w) d2[v]=min(d2[v],d2[u]+p); else d2[v]=d2[u]+p; d1[v]=d1[u]+w; if(vis[v]==0){ vis[v]=1; qu.push(v); } } } }}int main(){ int i,j,u,v,p,q; while(scanf("%d%d",&n,&m)!=EOF&&(n||m)){ for(i=1;i<=n;i++) G[i].clear(); for(i=1;i<=m;i++){ scanf("%d%d%d%d",&u,&v,&p,&q); G[u].push_back((node){v,p,q}); G[v].push_back((node){u,p,q}); } scanf("%d%d",&u,&v); spfa(u); printf("%d %d\n",d1[v],d2[v]); } return 0;}
阅读全文
0 0
- hdu3790(双关键字最短路)
- 【迪杰斯特拉双关键字最短路】【HDU3790】【最短路径问题】
- hdu3790 最短路径问题 (dijkstra,双关键值最短路)
- HDOJ 3790 最短路径问题(双关键字最短路)
- hdu3790 (最短路)
- hdu3790双权值最短路问题
- hdu3790(最短路dijstra)
- HDU3790(比较坑的最短路)
- hdu3790 最短路径问题<最短路>
- hdu3790
- hdu3790
- hdu3790
- hdu3790
- HDU3790
- HDU3790-最短路径问题(最短路+dp)
- HDU3790:最短路径问题(最短路+双权值)
- 双关键字快排
- 双关键字快排
- Kickstart Round A 2017 Problem B. Patterns Overlap
- theano dimshuffle
- 71总结
- PHP Web项目总结
- 73总结
- hdu3790(双关键字最短路)
- 454. 4Sum II
- PHP设计模式之装饰器模式
- 74总结
- mysql eclipse安装中遇到的各种问题
- 75总结
- Python流程控制语句->if .......else
- POJ 1014--Dividing
- SpringMVC与Struts2区别与比较总结