一开始我以为直线上怎么会有最短距离,后来发现每两点之间直接到和间接到达的距离一样的,比如 1 ->2->3 = 1->2+2->3但是不等于1->3的直接距离
建完图以后直接Floyd就行,还有就是long long 会WA ,用__int64
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62#include <iostream> #include <string.h> #include <queue> #include <vector> #include <utility> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define maxn 1200 #define LL __int64 const LL INF = 100000000002; LL sit[maxn]; LL dis[maxn][maxn]; int main() { #ifdef xxz freopen("in.txt","r",stdin); #endif // xxz LL Case,L1,L2,L3,L4,C1,C2,C3,C4,n,m,v,T; cin>>T; Case = 1; while(T--) { cin>>L1>>L2>>L3>>L4>>C1>>C2>>C3>>C4; cin>>n>>m; for(LL i = 1; i <= n; i++) { cin>>sit[i]; dis[i][i] = 0; for(LL j = 1; j < i; j++ ) { LL temp = max(sit[i],sit[j]) - min(sit[i],sit[j]); if(temp > L4) v = INF; else if(temp > L3) v = C4; else if(temp > L2) v= C3; else if(temp > L1) v = C2; else if(temp > 0) v = C1; else v = 0; dis[i][j] = dis[j][i] = v; } } for(LL k = 1; k <= n; k++) for(LL i = 1; i <= n; i++) for(LL j = 1; j<= n; j++) { dis[i][j] = min(dis[i][j],dis[i][k] + dis[k][j]); } printf("Case %d:n",Case++); for(LL i = 0; i < m; i++) { LL a,b; cin>>a>>b; if(dis[a][b]== INF ) printf("Station %I64d and station %I64d are not attainable.n",a,b); else printf("The minimum cost between station %I64d and station %I64d is %I64d.n",a,b,dis[a][b]); } } return 0; }
最后
以上就是机灵香水最近收集整理的关于HDU1690(Floyd)的全部内容,更多相关HDU1690(Floyd)内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复