hdu 2066 一个人的旅行 最短路spfa
来源:互联网 发布:unity3d在线教程 编辑:程序博客网 时间:2024/06/05 05:49
题意:从S个点出发到D个点的最短路。
建一个超级源点与S个点相连,距离为0,建一个超级汇点与D个点相连,距离为0。然后计算最短路。
#include <iostream>#include<cstdio>#include<cstring>#include<cmath>#include<queue>#define N 1100#define INF 0x7ffffffusing namespace std;int v[N],d[N],mp[N][N],n,s[N],t[N];int spfa(int S,int D){ for(int i=1;i<=n;i++) d[i]=INF,v[i]=0; queue<int> q; for(int i=0;i<S;i++) { v[s[i]]=1; d[s[i]]=0; q.push(s[i]); } while(!q.empty()) { int c=q.front(); q.pop(); v[c]=0; for(int i=1;i<=n;i++) { if(d[i]>d[c]+mp[c][i]) { d[i]=d[c]+mp[c][i]; if(!v[i]) v[i]=1,q.push(i); } } } int ans=INF; for(int i=0;i<D;i++) ans=min(ans,d[t[i]]); return ans;}int main(){ int m,S,D; while(~scanf("%d%d%d",&m,&S,&D)) { for(int i=0;i<N;i++) for(int j=0;j<N;j++) mp[i][j]=INF; n=0; for(int i=0;i<m;i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); n=max(n,max(a,b)); if(c<mp[a][b]) mp[a][b]=mp[b][a]=c; } for(int i=0;i<S;i++) scanf("%d",&s[i]); for(int i=0;i<D;i++) scanf("%d",&t[i]); cout<<spfa(S,D)<<endl; }}
0 0
- HDU 2066(一个人的旅行) SPFA(最短路问题)
- HDU 2066 一个人的旅行【最短路 dijkstra & floyed & SPFA 】
- hdu 2066 一个人的旅行(最短路+SPFA)
- hdu 2066 一个人的旅行 最短路spfa
- HDU-2066 一个人的旅行 最短路
- hdu 2066 一个人的旅行(最短路)
- hdu 2066 一个人的旅行(最短路)
- hdu 2066 一个人的旅行(最短路)
- HDU - 2066- 一个人的旅行【最短路】
- HDOJ 2066 一个人的旅行 (最短路 Dijkstra && SPFA)
- HDOJ 2066 一个人的旅行(最短路之SPFA)
- HDU 2066 一个人的旅行【最短路,多起点多终点,Dijkstra算法+spfa算法】
- HDU 2066 一个人的旅行【最短路,多起点多终点,Dijkstra算法+spfa算法】
- HDU 2066 一个人的旅行(单源最短路SPFA)
- HDU 2066 一个人的旅行(最短路的简单题)
- 【hdu 2066】 一个人的旅行 ( 最短路 Dijkstra)
- hdu 2066 一个人的旅行(Dijkstra求最短路问题)
- hdu 2066 一个人的旅行(最短路问题)
- Gpload error: [could not execute SQL in sql:after "Vacuum analyze
- linux mutt详解
- style.width和offsetwidth区别
- Windows8下硬盘安装Fedora17——可能会遇到的问题
- 电影里的黑客为何都不用鼠标
- hdu 2066 一个人的旅行 最短路spfa
- 92. Reverse Linked List II
- 硬盘安装Fedora20出错
- 了解蓝牙
- 第五周项目2--游戏中的角色类(2)
- 施一公
- Java中可变长参数的使用及注意事项
- 一致性网络设备命名——linux 网络接口 命名 p1p1 em1
- Java中使用Timer和TimerTask实现多线程