**链接:****传送门 **

题意:有 n 个城市,从城市 i 到城市 j 需要话费 Aij ,当穿越城市 i 的时候还需要话费额外的 Bi ( 起点终点两个城市不算穿越 ),给出 n × n 大小的城市关系图,-1 代表两个城市无法连通,询问若干次,求出每次询问的两个城市间的最少花费以及打印出路线图

思路:经典最短路打印路径问题,直接使用一个二维数组 path[i][j] 记录由点 i 到点 j 最短路的最后后继点,这道题关键是当松弛操作相等时,i 到 j 的最短距离是可以由 k 进行跳转的,这时候需要判断这两条路径哪个字典序更小,也就是比较这两条路的直接后继节点的大小( path[i][j] ? path[i][k] ),并更新最小字典序路径。


/*************************************************************************
> File Name: hdu1385t2.cpp
> Author: WArobot
> Blog: http://www.cnblogs.com/WArobot/
> Created Time: 2017年06月14日 星期三 16时56分08秒
************************************************************************/ #include<bits/stdc++.h>
using namespace std; const int MAX_N = 2010;
const int INF = 1e9;
int c[MAX_N] , dis[MAX_N][MAX_N] , path[MAX_N][MAX_N]; // path[i][j] 代表i到j这条最短路中的直接后继编号
int n , st , ed; void input(){
for(int i = 0 ; i < n ; i++){
for(int j = 0 ; j < n ; j++){
scanf("%d",&dis[i][j]);
if( dis[i][j] == -1 ) dis[i][j] = INF;
}
}
for(int i = 0 ; i < n ; i++) scanf("%d",&c[i]);
} void floyd(){
for(int i = 0 ; i < n ; i++)
for(int j = 0 ; j < n ; j++) path[i][j] = j;
for(int k = 0 ; k < n ; k++){
for(int i = 0 ; i < n ; i++){
for(int j = 0 ; j < n ; j++){
if( dis[i][j] > dis[i][k] + dis[k][j] + c[k] ){
dis[i][j] = dis[i][k] + dis[k][j] + c[k];
path[i][j] = path[i][k];
}
else if( dis[i][j] == dis[i][k] + dis[k][j] + c[k] ){
if( path[i][j] > path[i][k] ){
path[i][j] = path[i][k];
}
}
}
}
}
} vector<int> get_path(int st,int ed){
int t = st;
vector<int> ret;
for( ; t != ed ; t = path[t][ed] ) ret.push_back(t);
ret.push_back(ed);
return ret;
}
int main(){
while(~scanf("%d",&n) && n){
input();
floyd();
bool first = true;
while(true){
if( !first ) puts("");
first = false;
scanf("%d%d",&st,&ed);
if( st == -1 && ed == -1 ) break;
if( st == ed ){
printf("From %d to %d :\nPath: ",st,ed);
printf("%d\n",st);
printf("Total cost : 0\n");
}else {
printf("From %d to %d :\nPath: ",st--,ed--);
vector<int> ans = get_path(st,ed);
for(int i = 0 ; i < ans.size()-1 ; i++) printf("%d-->",ans[i]+1);
printf("%d\nTotal cost : %d\n",ans[ans.size()-1]+1 , dis[st][ed]);
}
}
}
return 0;
}

HDU 1385 Minimum Transport Cost( Floyd + 记录路径 )的更多相关文章

  1. hdu 1385 Minimum Transport Cost (Floyd)

    Minimum Transport CostTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

  2. hdu 1385 Minimum Transport Cost(floyd &amp;&amp; 记录路径)

    Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...

  3. HDU 1385 Minimum Transport Cost (Dijstra 最短路)

    Minimum Transport Cost http://acm.hdu.edu.cn/showproblem.php?pid=1385 Problem Description These are ...

  4. hdu 1385 Minimum Transport Cost (floyd算法)

    貌似···················· 这个算法深的东西还是很不熟悉!继续学习!!!! ++++++++++++++++++++++++++++ ======================== ...

  5. HDU 1385 Minimum Transport Cost (最短路,并输出路径)

    题意:给你n个城市,一些城市之间会有一些道路,有边权.并且每个城市都会有一些费用. 然后你一些起点和终点,问你从起点到终点最少需要多少路途. 除了起点和终点,最短路的图中的每个城市的费用都要加上. 思 ...

  6. HDU 1385 Minimum Transport Cost (输出字典序最小路径)【最短路】

    <题目链接> 题目大意:给你一张图,有n个点,每个点都有需要缴的税,两个直接相连点之间的道路也有需要花费的费用.现在进行多次询问,给定起点和终点,输出给定起点和终点之间最少花费是多少,并且 ...

  7. hdu 1385 Minimum Transport Cost

    http://acm.hdu.edu.cn/showproblem.php?pid=1385 #include <cstdio> #include <cstring> #inc ...

  8. HDU 1385 Minimum Transport Cost 最短路径题解

    本题就是使用Floyd算法求全部路径的最短路径,并且须要保存路径,并且更进一步须要依照字典顺序输出结果. 还是有一定难度的. Floyd有一种非常巧妙的记录数据的方法,大多都是使用这种方法记录数据的. ...

  9. Minimum Transport Cost(floyd+二维数组记录路径)

    Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...

随机推荐

  1. [Drupal]主题教程

    drupal6和drupal7的主题开发有很大不同,本指南包含了这些不同 drupal7的默认主题是Bartik,6的是Garland drupal的主题系统是如何工作的 这部分内容主要讲述的是dru ...

  2. hdu 1011 树型dp

    #include <cstdio> #include <iostream> #include <cstring> #include <vector> u ...

  3. expdp impdp 数据库导入导出命令具体解释

    一.创建逻辑文件夹,该命令不会在操作系统创建真正的文件夹.最好以system等管理员创建. create directory dpdata1 as 'd:\test\dump'; 二.查看管理理员文件 ...

  4. I NEED A OFFER!(hdoj--1203--01背包)

    I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  5. .NET前后台-JS获取/设置iframe内对象元素并进行数据处理

    转载请注明出处:果冻栋吖 这个主要是修改H3BPM一个批量审批的功能时候做的.先看下图: H3自带了批量审批的功能,也就是按钮1,有审批意见3,但是如果3里边不填写内容点击1之后,效果就是表单里边没有 ...

  6. 4、Collection接口功能测试(所有的All方法)

    package cn.itcast_01; import java.util.ArrayList; import java.util.Collection; /* * 所有带All的方法:(听完就忘) ...

  7. JS 经验总结

    1.IE中div的高度是content+padding+border之和,其它的是content的高度 2.一个标签里面只有一个属性,class='cls1 cls2' 3.同一页面不能出现相同的id ...

  8. Super超级ERP系统---(1)总体设计

       1.概述 随着互联网的发展,尤其是电子商务的发展,信息化系统越来显得越重要.在互联网飞速发展的今天,各种网站,软件系统应用而生,特别是随着近几年电子商务的发展,很多企业慢慢开始做大,管理方面暴露 ...

  9. 多个tomcat配置,解决冲突问题

    一.一般修改 路径: /opt/apache-tomcat/conf/server.xml 1.第一个tomcat使用默认配置 2.第二个tomcat一般配置 二.特殊修改 1.第二个tomcat特殊 ...

  10. 异步lambda表达式