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

    floyd算法。这题目比较操蛋,首先INF需要比较大,我选择了INF = 0xffffffffffffff。还有一点就是%lld会挂掉的,用%I64d才能AC。

    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxn = 105;
    __int64 INF = 0xffffffffffffff;
    __int64 x[maxn], jz[maxn][maxn], A[maxn][maxn];
    int n, m;
    void floyd()
    {
        int i, j, k;
        for (i = 0; i <= n; i++)
        for (j = 0; j <= n; j++)
            A[i][j] = jz[i][j];
    
        for (k = 1; k <= n; k++)
        {
            for (i = 1; i <= n; i++)
            {
                for (j = 1; j <= n; j++)
                {
                    if (k == i || k == j) continue;
                    if (A[i][k] == INF || A[k][j] == INF) continue;
                    else
                    {
                        if (A[i][k] + A[k][j] < A[i][j])
                        {
                            A[i][j] = A[i][k] + A[k][j];
                        }
                    }
                }
            }
        }
    }
    
    int main()
    {
        __int64 l1, l2, l3, l4, c1, c2, c3, c4;
        int i, j, sb, _;
        scanf("%d", &sb);
        for (_ = 1; _ <= sb; _++)
        {
            scanf("%I64d%I64d%I64d%I64d%I64d%I64d%I64d%I64d", &l1, &l2, &l3, &l4, &c1, &c2, &c3, &c4);
            scanf("%d%d", &n, &m);
            for (i = 0; i <= n; i++)
            {
                for (j = 0; j <= n; j++)
                {
                    if (i == j) jz[i][j] = 0;
                    else jz[i][j] = INF;
                }
            }
            for (i = 1; i <= n; i++) scanf("%I64d", &x[i]);
            for (i = 1; i <= n; i++)
            {
                for (j = 1; j <= n; j++)
                {
                    if (i == j) continue;
                    __int64 jl = abs(x[i] - x[j]);
                    if (jl > 0 && jl <= l1){ jz[i][j] = c1; jz[j][i] = c1; }
                    else if (jl > l1 && jl <= l2){ jz[i][j] = c2; jz[j][i] = c2; }
                    else if (jl > l2 && jl <= l3) { jz[i][j] = c3; jz[j][i] = c3; }
                    else if (jl > l3 && jl <= l4) { jz[i][j] = c4; jz[j][i] = c4; }
                }
            }
            floyd();
            int u, v;
            printf("Case %d:
    ", _);
            for (i = 0; i < m; i++)
            {
                scanf("%d%d", &u, &v);
                if (A[u][v] != INF)printf("The minimum cost between station %d and station %d is %I64d.
    ", u, v, A[u][v]);
                else printf("Station %d and station %d are not attainable.
    ", u, v);
            }
        }
        return 0;
    }
  • 相关阅读:
    find module providing package github.com/go-sql-driver/mysql: working directory is not part of a module
    深度学习中的epoch、batchsize、iterations的理解
    淘宝软件质量属性分析
    Git
    多线程
    Spark基础之Scala
    机器学习十讲第十讲
    机器学习十讲第九讲
    机器学习十讲第六讲
    本地MarkDown优雅发表
  • 原文地址:https://www.cnblogs.com/zufezzt/p/4521366.html
Copyright © 2011-2022 走看看