首页 > 代码库 > Zoj 2027 Travelling Fee 最短路变形
Zoj 2027 Travelling Fee 最短路变形
给你一个图和AB,问你从A到B的路径中,当每条路径的最长的边长度忽略的情况下,A到B的最短路.
建立两个矩阵,一个记录最大长度,一个是最短路,同步更新即可.
#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <climits>#include <string>#include <iostream>#include <map>#include <cstdlib>#include <list>#include <set>#include <queue>#include <stack>using namespace std;typedef long long LL;const int maxn = 105;map<string,int> mp;int maxcost[maxn][maxn],cost[maxn][maxn];int n,cnt,str,ed;string a,b;int id(string &s) { if(mp.count(s) == 0) mp[s] = ++cnt; return mp[s];}int main() { while(cin >> a >> b) { mp.clear(); cnt = 0; str = id(a); ed = id(b); cin >> n; memset(maxcost,-1,sizeof(maxcost)); memset(cost,-1,sizeof(cost)); for(int i = 1;i <= n;i++) { int cc; cin >> a >> b >> cc; cost[id(a)][id(b)] = cost[id(b)][id(a)] = 0; maxcost[id(a)][id(b)] = maxcost[id(a)][id(b)] = cc; } for(int k = 1;k <= cnt;k++) { for(int i = 1;i <= cnt;i++) { for(int j = 1;j <= cnt;j++) if(cost[i][k] != -1 && cost[k][j] != -1) { int ca = cost[i][j]; int cb = cost[i][k] + cost[k][j] + min(maxcost[i][k],maxcost[k][j]); if(cb < ca || ca == -1) { cost[i][j] = cb; maxcost[i][j] = max(maxcost[i][k],maxcost[k][j]); } } } } printf("%d\n",cost[str][ed]); } return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。