제출 #1183690

#제출 시각아이디문제언어결과실행 시간메모리
1183690gabyferaqToll (BOI17_toll)C++20
0 / 100
259 ms589824 KiB
#include <bits/stdc++.h>
using namespace std;
vector<vector<pair<long long,long long>>> vec;
vector<vector<long>> dis;
vector<bool> vis;
long long raiz;
void bfs(int nodo)
{
    priority_queue<pair<long long,long long>> cola;
    cola.push({0,nodo});
    dis[nodo][nodo]=0;
    raiz=nodo;
    while(!cola.empty())
    {
        nodo=cola.top().second;
        cola.pop();
        if(!vis[nodo]){
            for(pair<long long,long long> next:vec[nodo]) {
                if(dis[raiz][nodo]+next.second<dis[raiz][next.first]){
                    dis[raiz][next.first]=dis[raiz][nodo]+next.second;
                    cola.push({-dis[raiz][next.first],next.first});
                }
            }
            vis[nodo]=true;
        }
    }
}
void solve()
{
    long long k,n,m,o; cin>>k>>n>>m>>o;
    vec.assign(n,vector<pair<long long,long long>> ());
    vis.assign(n,false);
    dis.assign(n,vector<long> (n,1e6+1));
    long long a,b,t,p,g;
    while(m--)
    {
        cin>>a>>b>>t;
        if(b/k==(a/k)+1) 
        vec[a].push_back({b,t});
    }
    while(o--){
    cin>>p>>g; 
    if(dis[p][p]!=0) {vis.assign(n,false); bfs(p);}
    if(dis[p][g]==1e6+1) cout<<"-1"<<endl;
    else cout<<dis[p][g]<<endl;
    } 
    // for(auto x:dis)
    // {
    //     for(auto y:x)
    //     cout<<y<<" ";
    //     cout<<endl;
    // }
}
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...