• 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;
    }
  • 相关阅读:
    运算符重载
    poj2329dfs
    poj2349最小生成树prim
    poj1258最小生成树prim
    read 一个防止找不到就写一下的输入模板
    CentOS7下安装ngnix
    CentOS7下安装mysql
    CentOS7下安装rabbitmq
    在window 2008r2开发服务器上安装MSMQ消息队列
    spark快速大数据分析学习笔记(1)
  • 原文地址:https://www.cnblogs.com/thefirstfeeling/p/4410793.html
Copyright © 2020-2023  润新知