您的位置:首页 > 其它

uva 11280 求2点之间最短距离(图中不超过k个节点)

2017-09-23 12:29 316 查看
#include<map>
#include<cstdio>
#include<cstring>
#include<iostream>
#define INF 0x3f3f3f3f
using namespace std;
map<string,int>mp;
string s,s1,s2;
int n,m,q,dp[1010][1010],x[1010],y[1010],c[1010];
void solve(){
for(int i=1;i<n;i++)
dp[i][0]=INF;
for(int k=1;k<=n;k++){
for(int i=0;i<n;i++) dp[i][k]=dp[i][k-1];
for(int i=0;i<m;i++)
dp[y[i]][k]=min(dp[y[i]][k],dp[x[i]][k-1]+c[i]);
}
}
int main(){
int T,t=1;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i=0;i<n;i++){
cin>>s;
mp[s]=i;
}
scanf("%d",&m);
for(int i=0;i<m;i++){
cin>>s1>>s2;
x[i]=mp[s1];
y[i]=mp[s2];
scanf("%d",&c[i]);
}
solve();
if(t!=1)
printf("\n");
printf("Scenario #%d\n",t++);
scanf("%d",&q);
while(q--){
int x;
scanf("%d",&x);
if(x+1>=n)
x=n-1;
if(dp[n-1][x+1] == INF)
printf("No satisfactory flights\n");
else
printf("Total cost of flight(s) is $%d\n",dp[n-1][x+1]);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: