zoukankan      html  css  js  c++  java
  • http://47.95.147.191/problem/P3

    http://47.95.147.191/problem/P3
    规定边数的最短路,跑floyd+矩阵快速幂

    #include<iostream>
    #include<cstdio>
    #include<queue>
    #include<algorithm>
    #include<cmath>
    #include<ctime>
    #include<set>
    #include<map>
    #include<stack>
    #include<cstring>
    #define inf 2147483647
    #define For(i,a,b) for(long long i=a;i<=b;i++)
    #define p(a) putchar(a)
    #define g() getchar()
    #define mod 1000000007
    //by war
    //2020.2.26
    using namespace std;
    long long n,k,S,T,x,y,lim,c;
    long long m[1010];
    struct matrix{
        long long a[310][310];
        matrix operator*(const matrix&b)const{
            matrix r;
            For(i,1,n)
                For(j,1,n){
                    r.a[i][j]=inf;    
                    For(k,1,n)
                    r.a[i][j]=min(r.a[i][j],a[i][k]+b.a[k][j]);
                }
            return r;
        }
    }a;
    void in(long long &x)
    {
        long long y=1;
        char c=g();x=0;
        while(c<'0'||c>'9')
        {
        if(c=='-')
        y=-1;
        c=g();
        }
        while(c<='9'&&c>='0')x=(x<<1)+(x<<3)+c-'0',c=g();
        x*=y;
    }
    void o(long long x)
    {
        if(x<0)
        {
            p('-');
            x=-x;
        }
        if(x>9)o(x/10);
        p(x%10+'0');
    }
    
    matrix ksm(matrix a,long long b){
        matrix r=a;b--;
        while(b>0){
            if(b%2==1) r=r*a;
            a=a*a;
            b>>=1;
        }
        return r;
    }
    
    int main(){
        in(lim);in(k);in(S);in(T);
        For(i,0,300)
            For(j,0,300)
                a.a[i][j]=inf;
        For(i,1,k){
            in(c);in(x);in(y);
            if(!m[x]) m[x]=++n;
            if(!m[y]) m[y]=++n;
            a.a[m[x]][m[y]]=a.a[m[y]][m[x]]=c;
        }
        matrix r=ksm(a,lim);
        o(r.a[m[S]][m[T]]);
        return 0;
    }
  • 相关阅读:
    Linux Shell 基本语法
    VIM选择文本块/复制/粘贴
    linux vi命令详解2
    SSH命令详解2
    JAVA调用Shell脚本
    scp命令的用法详解
    Java实践 — SSH远程执行Shell脚本
    Remote SSH: Using JSCH with Expect4j
    c++内置函数---7
    c++将引用作为函数的参数---6
  • 原文地址:https://www.cnblogs.com/war1111/p/12368053.html
Copyright © 2011-2022 走看看