Cod sursa(job #2499997)

Utilizator rd211Dinucu David rd211 Data 27 noiembrie 2019 09:01:56
Problema Obiective Scor 35
Compilator cpp-64 Status done
Runda guritza Marime 1.39 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("obiective.in");
ofstream fout("obiective.out");
int n,m;
const int NMAX = 32010;
vector<pair<int,bool>> graf[NMAX];
int D[NMAX];
bool inCue[NMAX];
struct compare{
bool operator()(int a, int b)
{
    return D[a]>D[b];
}
};

void dijkstra(int start)
{

    priority_queue<int,vector<int>,compare> cue;
    cue.push(start);
    inCue[start] = true;
    fill(D,D+NMAX,1231123);
    D[start] = 0;
    while(cue.size())
    {
        int cueTop = cue.top();
        inCue[cueTop] = false;
        cue.pop();
        for(int i = 0;i<graf[cueTop].size();i++)
        {
            if(D[graf[cueTop][i].first]>D[cueTop]+graf[cueTop][i].second)
            {
                  if(!inCue[graf[cueTop][i].first])
                  {
                      inCue[graf[cueTop][i].first] = true;
                      cue.push(graf[cueTop][i].first);
                  }
                  D[graf[cueTop][i].first] = D[cueTop]+graf[cueTop][i].second;
            }
        }
    }
}
int main()
{
    fin>>n>>m;
    for(int i = 0;i<m;i++)
    {
        int u,v;
        fin>>u>>v;
        graf[u].push_back({v,false});
        graf[v].push_back({u,true});
    }
    int t;
    fin>>t;
    while(t--)
    {
        int g,p;
        fin>>g>>p;
        dijkstra(g);
        fout<<D[p]<<'\n';
    }
    return 0;
}