제출 #526718

#제출 시각아이디문제언어결과실행 시간메모리
526718beepbeepsheepAutobus (COCI22_autobus)C++17
70 / 70
144 ms3268 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define ii pair<ll,ll>
#define iii pair<ll,ii>
#define endl '\n'
const ll inf=1e15;
const ll mod=1e9+7;
const ll maxn=71;

ll adj[maxn][maxn];
ll dis[maxn][maxn][maxn];
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    for (int i=0;i<maxn;i++){
        for (int j=0;j<maxn;j++){
            adj[i][j]=inf;
        }
        adj[i][i]=0;
    }
    ll n,e,a,b,w;
    cin>>n>>e;
    for (int i=0;i<e;i++){
        cin>>a>>b>>w;
        adj[a][b]=min(adj[a][b],w);
    }
    ll k,y,u,x;
    cin>>k>>y;
    k=min(k,69LL);
    queue<ii> q;
    memset(dis,-1,sizeof(dis));
    for (int a=1;a<=n;a++){
        q.emplace(a,0);
        dis[a][a][0]=0;
        while (q.size()){
            u=q.front().first;
            x=q.front().second;
            q.pop();
            if (x>k) continue;
            for (int i=1;i<=n;i++){
                if (dis[a][i][x+1]!=-1){
                    dis[a][i][x+1]=min(dis[a][i][x+1],dis[a][u][x]+adj[u][i]);
                } else{
                    dis[a][i][x+1]=dis[a][u][x]+adj[u][i];
                    q.emplace(i,x+1);
                } //n
            }
        }//n2
    }
    for (int i=0;i<y;i++){
        ll ans=inf;
        cin>>a>>b;
        for (int i=0;i<=k;i++){
            if (dis[a][b][i]!=-1) ans=min(ans,dis[a][b][i]);
        }
        cout<<(ans==inf?-1:ans)<<endl;
    }//n2
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...