求问本地 RE 提交 AC
查看原帖
求问本地 RE 提交 AC
667558
_Kamisato_Ayaka_楼主2024/12/16 10:36

rt.

本地缓存溢出了

#include <bits/stdc++.h>
#define int long long

using namespace std;
template <typename Tp>
inline void read(Tp &x){
    Tp res = 0,f = 1;
    char ch = getchar();
    while(!isdigit(ch)){if(ch == '-') f = -1;ch = getchar();}
    while(isdigit(ch)){res = (res << 1) + (res << 3) + (ch ^ 48);ch = getchar();}
    x = res * f;
}

const int maxn = 1005,inf = 0x3f3f3f3f;
int n,t,s,e,apr[maxn],idx;

struct Matrix{
    int mat[maxn][maxn];
    Matrix(){memset(mat,inf,sizeof(mat));}
    Matrix operator * (const Matrix &g) const{
        Matrix ret;
        for(int k = 1;k <= idx;k ++){
            for(int i = 1;i <= idx;i ++){
                for(int j = 1;j <= idx;j ++){
                    ret.mat[i][j] = min(ret.mat[i][j],g.mat[i][k] + mat[k][j]);
                }
            }
        }
        return ret;
    }
}Ans;

Matrix mat_qpow(Matrix x,int k){
    Matrix ret;
    ret = x,k --;
    while(k){
        if(k & 1) ret = ret * x;
        x = x * x;
        k >>= 1;
    }
    return ret;
}

signed main(){
    read(n),read(t),read(s),read(e);
    for(int i = 1;i <= t;i ++){
        int w,u,v;
        read(w),read(u),read(v);
        if(!apr[u]) apr[u] = ++ idx;
        if(!apr[v]) apr[v] = ++ idx;
        Ans.mat[apr[u]][apr[v]] = Ans.mat[apr[v]][apr[u]] = w;
    }
    Ans = mat_qpow(Ans,n);
    printf("%lld\n",Ans.mat[apr[s]][apr[e]]);
    return 0;
}

2024/12/16 10:36
加载中...