zoukankan      html  css  js  c++  java
  • fzu 2173 floyd+矩阵快速幂

    #include<stdio.h>
    #define inf 1000000000000000
    #define N 100
    long long tmp[N][N],ma[N][N];
    int n;
    long long min(long long a,long long b)
    {
        return a<b?a:b;
    }
    void floy(long long  a[N][N])
    {
        int i,j,k;
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
                tmp[i][j]=inf;
          for(k=1;k<=n;k++)
            for(i=1;i<=n;i++)
              for(j=1;j<=n;j++)
                tmp[i][j]=min(tmp[i][j],a[i][k]+ma[k][j]);
          for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
              a[i][j]=tmp[i][j];
    }
    void f(int k,long long dis[N][N])
    {
        k--;
        while(k)
        {
            if(k&1)
                floy(dis);
            floy(ma);
            k=k/2;
        }
    }
    int main()
    {
        int t,m,k,i,j,u,v;
        long long cost;
        long long dis[N][N];
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d%d",&n,&m,&k);
            for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
               {
                    ma[i][j]=inf; dis[i][j]=inf;
                }
            for(i=1;i<=m;i++)
            {
                scanf("%d%d%I64d",&u,&v,&cost);
                if(ma[u][v]>cost){  ma[u][v]=cost;
                dis[u][v]=ma[u][v];
                }
            }
            f(k,dis);
            if(dis[1][n]>=inf)  printf("-1 ");
            else   printf("%I64d ",dis[1][n]);
        }
        return 0;
    }
  • 相关阅读:
    详解prototype、proto和constructor的关系
    BFC
    transition(动画属性)
    React组件生命周期
    正则限制input只能输入大于0的数字
    msbuild编译
    python 在头文件添加 #include "stdafx.h"
    2017年感想
    chVsprintf
    富文本测试
  • 原文地址:https://www.cnblogs.com/thefirstfeeling/p/4410793.html
Copyright © 2011-2022 走看看