Pagini recente » Cod sursa (job #2398903) | Cod sursa (job #2625822) | Cod sursa (job #2698203) | Cod sursa (job #799414) | Cod sursa (job #2500002)
#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;
}