ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

UVA - 11280 Flying to Fredericton (伪最短路)

2021-04-05 14:02:48  阅读:189  来源: 互联网

标签:Fredericton int 短路 Flying ne long s2id UVA hd


题意:求无向图从起点到终点最多停留k次的最短路

设d[i][j]表示走了i步后到达点j的最小代价,看似最短路,实则dp,因为求解过程中i是递增的,不存在环,直接递推求解即可

什么?你说最短路也属于dp?那没事了

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int N=100+10,inf=0x3f3f3f3f;
 5 int n,m,hd[N],d[N][N],ne,ka,Q;
 6 char s1[30],s2[30];
 7 struct E {int v,c,nxt;} e[20010];
 8 void link(int u,int v,int c) {e[ne]= {v,c,hd[u]},hd[u]=ne++;}
 9 map<string,int> s2id;
10 int id(string s) {
11     if(s2id.count(s))return s2id[s];
12     int n=s2id.size()+1;
13     return s2id[s]=n;
14 }
15 void solve() {
16     for(int i=0; i<=n; ++i)for(int j=1; j<=n; ++j)d[i][j]=inf;
17     d[0][id("Calgary")]=0;
18     for(int t=0; t<n; ++t)
19         for(int u=1; u<=n; ++u)if(d[t][u]<inf)
20                 for(int i=hd[u]; ~i; i=e[i].nxt) {
21                     int v=e[i].v,c=e[i].c;
22                     d[t+1][v]=min(d[t+1][v],d[t][u]+c);
23                 }
24 }
25 int qry(int k) {
26     int ret=inf;
27     for(int t=0; t<=k; ++t)ret=min(ret,d[t][id("Fredericton")]);
28     return ret;
29 }
30 
31 int main() {
32     int _;
33     for(scanf("%d",&_); _--;) {
34         if(ka++)puts("");
35         printf("Scenario #%d\n",ka);
36         s2id.clear();
37         memset(hd,-1,sizeof hd),ne=0;
38         scanf("%d",&n);
39         for(int i=1; i<=n; ++i)scanf("%*s");
40         scanf("%d",&m);
41         while(m--) {
42             int c;
43             scanf("%s%s%d",s1,s2,&c);
44             link(id(s1),id(s2),c);
45         }
46         solve();
47         for(scanf("%d",&Q); Q--;) {
48             int k;
49             scanf("%d",&k);
50             k++;
51             k=min(k,n);
52             int ans=qry(k);
53             if(ans==inf)puts("No satisfactory flights");
54             else printf("Total cost of flight(s) is $%d\n",ans);
55         }
56     }
57     return 0;
58 }

 

标签:Fredericton,int,短路,Flying,ne,long,s2id,UVA,hd
来源: https://www.cnblogs.com/asdfsag/p/14618297.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有