HDU 2992 Hotel booking(BFS+DFS 或者 SPFA+Floyd)
2014-04-01 19:43
423 查看
点我看题目
题意 : 一个司机要从1点到达n点,1点到n点中有一些点有宾馆,司机的最长开车时间不能超过10小时,所以要在10小时之内找到宾馆休息,但是为了尽快的走到n点,问最少可以经过几个宾馆。
思路 : 这个题太狠了,简直不是人做的。。。。可以BFS一下,然后在B之前先D一下能走的路。当然也可以用SPFA+Floyd。
View Code
二货写的SPFA+Floyd
题意 : 一个司机要从1点到达n点,1点到n点中有一些点有宾馆,司机的最长开车时间不能超过10小时,所以要在10小时之内找到宾馆休息,但是为了尽快的走到n点,问最少可以经过几个宾馆。
思路 : 这个题太狠了,简直不是人做的。。。。可以BFS一下,然后在B之前先D一下能走的路。当然也可以用SPFA+Floyd。
#include <cstdio> #include <cstring> #include <map> #include <vector> #include <queue> #define maxn 200 #include <algorithm> using namespace std; const int inf=0x3fffffff; struct node { int v,cost; }; int g[maxn][maxn],a[maxn],dis[20000]; int n,m,k; map<int,int>q; vector<node>v[20000]; bool vis[20000]; int que[20000]; void inti() { q.clear(); for(int i=0; i<=n; i++) { v.clear(); } for(int i=0; i<=m+2; i++) { for(int j=0; j<=m+2; j++) { g[j]=inf; if(i==j) g[j]=0; } } } void spfa(int qr) { queue<int>qq; memset(vis,false,sizeof(vis)); for(int i=1; i<=n; i++) dis=inf; dis[qr]=0; qq.push(qr); vis[qr]=true; while(!qq.empty()) { int x=qq.front(); qq.pop(); vis[x]=false; for(int i=0; i<(int)v[x].size(); i++) { int v2=v[x].v,cost=v[x].cost; if(dis[v2]>dis[x]+cost) { dis[v2]=dis[x]+cost; if(!vis[v2]) { vis[v2]=true; qq.push(v2); } } } } for(int i=1; i<=n; i++) { if(dis<=600&&q!=0) { g[q[qr]][q]=1; } } } void floyd() { for(int c=0; c<=m+1; c++) { for(int i=0; i<=m+1; i++) { for(int j=0; j<=m+1; j++) { g[j]=min(g[j],g[c]+g[c][j]); } } } } int main() { while(scanf("%d",&n)!=EOF) { if(n==0) break; scanf("%d",&m); inti(); for(int i=1; i<=m; i++) { scanf("%d",&a); q[a]=i; } a[0]=1; q[1]=0; a[m+1]=n; q =m+1; scanf("%d",&k); for(int i=0; i<k; i++) { int u,v1,cost; scanf("%d%d%d",&u,&v1,&cost); node st; st.v=v1; st.cost=cost; node st1; st1.v=u; st1.cost=cost; v.push_back(st); v[v1].push_back(st1); } for(int i=0; i<=m; i++) { spfa(a); } floyd(); if(g[0][m+1]==inf) { printf("-1\n"); } else printf("%d\n",g[0][m+1]-1); } return 0; }
View Code
二货写的SPFA+Floyd
相关文章推荐
- hdu2992 Hotel booking (floyd+spfa+map)
- 【HDU 2992 Hotel booking】spfa+floyd+map映射
- HDU 2992 Hotel booking(spfa+floyd)
- hdu 2992 Hotel booking(spfa+floyd+map)
- HDU 1241 Oil Deposits (基础DFS 或者 BFS)
- hdu_1242_bfs_或者记忆化dfs
- HDU 2504 Wang Xifeng's Little Plot (dfs 或者bfs)
- HDU 1312 Red and Black(基础bfs或者dfs)
- HDU 1728逃离迷宫(DFS或者BFS)
- HDU 1175 连连看 (BFS 或者 DFS)
- HDU 2922 Hotel booking(SPFA+floyd+map)
- hdu-2102A计划(两层地图 bfs或者dfs)
- HDU 1728 逃离迷宫 单方向BFS 或者DFS加剪枝
- HDU 1728逃离迷宫(DFS或者BFS)
- HDU 4771 (DFS+BFS)
- hdu 4771 Stealing Harry Potter's Precious(DFS+BFS)
- hdu 5546(DFS或BFS)
- HDU 1045 fire net【二分匹配或者DFS】
- Codeforces Round #286 (Div. 2) B. Mr. Kitayuta's Colorful Graph(BFS || DFS || Floyd || 并查集)
- HDU 1142(SPFA+dfs+dp)