zoukankan      html  css  js  c++  java
  • HDU 1690 Bus System

    题目大意:给出若干巴士不同价格的票的乘坐距离范围,现在有N个站点,有M次询问,查询任意两个站点的最小花费

    解析:由于是多次查询不同站点的最小花费,所以用弗洛伊德求解 时间复杂度(O^3) 比较基础的弗洛伊德

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    #define INF 1000000000000
     
    typedef __int64 LL;
    const int N = 110;
     
    __int64 dis[N][N],place[N];
    __int64 L1,L2,L3,L4,C1,C2,C3,C4;
    int n,m;
     
    LL judge(LL x)
    {
        if(x < 0)
            x *= -1;
        if(x > 0 && x <= L1)
            return C1;
        else if(x > L1 && x <= L2)
            return C2;
        else if(x > L2 && x <= L3)
            return C3;
        else if(x > L3 && x <= L4)
            return C4;
        else
            return INF;
    }
     
    void floyd()
    {
        for(int k=1; k<=n; k++)
        {
            for(int i=1; i<=n; i++)
            {
                for(int j=1; j<=n; j++)
                {
                    if(dis[i][j] > dis[i][k] + dis[k][j] && dis[i][k] != INF && dis[k][j] != INF)
                        dis[i][j] = dis[i][k] + dis[k][j];
                }
            }
        }
    }
     
    int main()
    {
        //freopen("input.txt","r",stdin);
        int t;
        int kase = 1;
        cin>>t;
        while(t--)
        {
            scanf("%I64d%I64d%I64d%I64d%I64d%I64d%I64d%I64d",&L1,&L2,&L3,&L4,&C1,&C2,&C3,&C4);
            scanf("%d%d",&n,&m);
            for(int i=1; i<=n; i++)
            {
                scanf("%I64d",&place[i]);
            }
            for(int i=1; i<=n; i++)
            {
                for(int j=i+1; j<=n; j++)
                {
                    __int64 x = place[i] - place[j];
                    dis[i][j] = dis[j][i] = judge(x);
                }
            }
            floyd();
            printf("Case %d:
    ",kase++);
            for(int i=1; i<=m; i++)
            {
                int st,ed;
                scanf("%d%d",&st,&ed);
                if(dis[st][ed] != INF)
                    printf("The minimum cost between station %d and station %d is %I64d.
    ",st,ed,dis[st][ed]);
                else
                    printf("Station %d and station %d are not attainable.
    ",st,ed);
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    CF1091E
    jzoj5703
    CF1109F
    杂题
    CF1194F
    杂题
    个人作业1-数组(二维数组)
    第三周-学习进度条
    构建之法阅读笔记02
    个人作业1-数组(续1)
  • 原文地址:https://www.cnblogs.com/Lionel002/p/5768227.html
Copyright © 2011-2022 走看看