Pagini recente » Cod sursa (job #2496769) | Cod sursa (job #425707) | Cod sursa (job #2840665) | Cod sursa (job #358649) | Cod sursa (job #3326546)
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 35002
using namespace std;
ifstream fin("obiective.in");
ofstream fout("obiective.out");
int N,M,T,dist[NMAX];
vector<pair<int,int>> graph[NMAX];
deque<int> q;
void citire()
{
fin>>N>>M;
int u,v;
for(int i=1; i<=M; i++)
{
fin>>u>>v;
graph[u].push_back({v,0});
graph[v].push_back({u,1});
}
fin>>T;
}
void BFS(int start)
{
for(int i=1; i<=N; i++)
{
dist[i]=-1;
}
dist[start]=0;
q.push_front(start);
while(!q.empty())
{
int nod=q.front();
q.pop_front();
for(int i=0; i<graph[nod].size(); i++)
{
int next_nod=graph[nod][i].first;
if(dist[next_nod]==-1)
{
dist[next_nod]=dist[nod]+graph[nod][i].second;
q.push_back(next_nod);
}
else
{
if(dist[next_nod]>dist[nod]+graph[nod][i].second)
{
dist[next_nod]=dist[nod]+graph[nod][i].second;
q.push_front(next_nod);
}
}
}
}
}
int main()
{
citire();
int g,m;
for(int q=1; q<=T; q++)
{
fin>>g>>m;
BFS(g);
fout<< dist[m] << "\n";
}
return 0;
}