你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / C专栏
HDU 1690 多源最短路径 Bus System
 

分析:求出任意两点这间的最小消费.对m次询问就可直接打出来.


[cpp]
#include<iostream>  
#include<string>  
#include<cstring>  
#include<algorithm>  
#include<cstdio>  
#include<cmath>  
#include<iomanip>  
 
using namespace std; 
const int maxn=1000+10; 
const __int64 inf=100000000002; 
 
__int64 L1,L2,L3,L4,C1,C2,C3,C4; 
__int64 map[maxn][maxn]; 
__int64 d[maxn]; 
 
int main(){ 
    int T; cin>>T; 
    int cas=1; 
    while(T--){ 
        cin>>L1>>L2>>L3>>L4>>C1>>C2>>C3>>C4; 
        int n,m; cin>>n>>m; 
        ///初始化  
        for(int i=1;i<=n;++i){ 
            cin>>d[i]; 
            map[i][i]=0; 
            for(int j=1;j<i;++j){ 
                __int64 s=max(d[i],d[j])-min(d[i],d[j]),v; 
                if(s>L4) v=inf; 
                else if(s>L3) v=C4; 
                else if(s>L2) v=C3; 
                else if(s>L1) v=C2; 
                else if(s>0)  v=C1; 
                else v=0; 
                map[i][j]=map[j][i]=v; 
            } 
        } 
        ///floyd算法  
        for(int k=1;k<=n;++k) 
            for(int i=1;i<=n;++i) 
                for(int j=1;j<=n;++j) 
                    map[i][j]=min(map[i][j],map[i][k]+map[k][j]); 
 
        printf("Case %d:\n",cas++); 
        while(m--){ 
            int x,y; cin>>x>>y; 
            if(map[x][y]==inf)printf("Station %d and station %d are not attainable.\n",x,y); 
            else printf("The minimum cost between station %d and station %d is %I64d.\n",x,y,map[x][y]); 
        } 
    } 
    return 0; 

#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<iomanip>

using namespace std;
const int maxn=1000+10;
const __int64 inf=100000000002;

__int64 L1,L2,L3,L4,C1,C2,C3,C4;
__int64 map[maxn][maxn];
__int64 d[maxn];

int main(){
    int T; cin>>T;
    int cas=1;
    while(T--){
        cin>>L1>>L2>>L3>>L4>>C1>>C2>>C3>>C4;
        int n,m; cin>>n>>m;
        ///初始化
        for(int i=1;i<=n;++i){
            cin>>d[i];
            map[i][i]=0;
            for(int j=1;j<i;++j){
                __int64 s=max(d[i],d[j])-min(d[i],d[j]),v;
                if(s>L4) v=inf;
                else if(s>L3) v=C4;
                else if(s>L2) v=C3;
                else if(s>L1) v=C2;
                else if(s>0)  v=C1;
                else v=0;
                map[i][j]=map[j][i]=v;
            }
        }
        ///floyd算法
        for(int k=1;k<=n;++k)
            for(int i=1;i<=n;++i)
                for(int j=1;j<=n;++j)
                    map[i][j]=min(map[i][j],map[i][k]+map[k][j]);

        printf("Case %d:\n",cas++);
        while(m--){
            int x,y; cin>>x>>y;
            if(map[x][y]==inf)printf("Station %d and station %d are not attainable.\n",x,y);
            else printf("The minimum cost between station %d and station %d is %I64d.\n",x,y,map[x][y]);
        }
    }
    return 0;
}

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089