图论专项shortest_paths:UVa 11280
来源:互联网 发布:c语言游戏五子棋 编辑:程序博客网 时间:2024/05/16 11:50
增加一维记录走过的步数进行SPFA即可,最后注意从小到大更新结果。
#include <iostream>#include <cstdio>#include <queue>#include <cstring>#include <map>#include <string>#include <utility>using namespace std;typedef pair<int,int> pii;const int maxn=110;const int maxm=2000;const int inf=1<<30;map<string,int> name;int n,m,q,e;int head[maxn],pnt[maxm],nxt[maxm],cost[maxm];int d[maxn][maxn],vis[maxn][maxn];void addedge(int u,int v,int c){ pnt[e]=v;cost[e]=c;nxt[e]=head[u];head[u]=e++;}void bellmanford(){ for(int i=0;i<n;i++) for(int j=0;j<n;j++) d[i][j]=inf,vis[i][j]=0; queue<pii> q; int s=name["Calgary"]; q.push(make_pair(s,0)); d[s][0]=0;vis[s][0]=1; while(!q.empty()) { pii p=q.front();q.pop(); int u=p.first,ud=p.second; vis[u][ud]=0; for(int i=head[u];i!=-1;i=nxt[i]) { int v=pnt[i],c=cost[i],vd=ud+1; if(d[v][vd]>d[u][ud]+c) { d[v][vd]=d[u][ud]+c; if(!vis[v][vd]) { vis[v][vd]=1; q.push(make_pair(v,vd)); } } } } for(int i=0;i<n;i++) for(int j=1;j<n;j++) d[i][j]=min(d[i][j],d[i][j-1]);}int main(){ int T,kase=1; cin>>T; while(T--) { cin>>n; name.clear(); for(int i=0;i<n;i++) { string s; cin>>s; name[s]=i; } cin>>m; memset(head,-1,sizeof(head)); e=0; for(int i=0;i<m;i++) { string s1,s2; int u,v,c; cin>>s1>>s2>>c; u=name[s1],v=name[s2]; addedge(u,v,c); } int t=name["Fredericton"]; bellmanford(); cin>>q; cout<<"Scenario #"<<kase++<<endl; while(q--) { int limit; cin>>limit; if(limit+1>=n) cout<<"Total cost of flight(s) is $"<<d[t][n-1]<<endl; else if(d[t][limit+1]==inf) cout<<"No satisfactory flights"<<endl; else cout<<"Total cost of flight(s) is $"<<d[t][limit+1]<<endl; } if(T) puts(""); } return 0;}
- 图论专项shortest_paths:UVa 11280
- 图论专项shortest_paths:UVa 10246
- 图论专项shortest_paths:UVa 658
- 图论专项shortest_paths:UVa 10269
- 字符串专项:UVa 12012
- 搜索专项:UVa 10318
- 字符串专项:UVa 10298
- 字符串专项:UVa 11475
- 字符串专项:UVa 11855
- 图论专项训练习题集
- 图论专项练习反思
- 数学专项counting:UVa 11038
- 数学专项counting:UVa 10883
- 计算几何专项:UVa 11437
- 计算几何专项:UVa 11646
- 计算几何专项:UVa 11817
- 计算几何专项:UVa 11524
- 计算几何专项:UVa 10566
- hadoop学习笔记
- poj1190生日蛋糕
- 详谈wince电源管理
- 操作系统--不要站在别人的看法上看操作系统
- 透过表象看本质!?
- 图论专项shortest_paths:UVa 11280
- 关于python文件操作
- [leetcode刷题系列]Sqrt(x)
- cocos2d-x(一) win32交叉编译android项目经验
- 04-在线小词典案例
- Java动态调用对象的方法
- wince+s3c6410 SD卡启动
- 0807leetcode刷题总结
- 将博客搬至CSDN