Pagini recente » Cod sursa (job #2177236) | Cod sursa (job #3178224) | Cod sursa (job #3186620) | Cod sursa (job #2937303) | Cod sursa (job #3277867)
#include <iostream>
#include <fstream>
#include <vector>
#include <deque>
using namespace std;
ifstream in("obiective.in");
ofstream out("obiective.out");
vector <pair <int, int>> graph[32005];
int nodes, edges, queries;
deque <int> q;
int bfs01 (int start, int finish){
vector <int> dist(32005, 1e9);
dist[start] = 0;
q.push_front(start);
while (!q.empty()){
int current = q.front();
q.pop_front();
for (auto idx:graph[current]){
if (dist[idx.first] > dist[current] + idx.second){
dist[idx.first] = dist[current] + idx.second;
if (idx.second == 1)
q.push_back(idx.first);
else
q.push_front(idx.first);
}
}
}
return dist[finish];
}
int main (){
int x, y;
in >> nodes >> edges;
for (int i=1; i<=edges; ++i){
in >> x >> y;
graph[x].push_back({y, 0});
graph[y].push_back({x, 1});
}
in >> queries;
for (;queries; --queries){
in >> x >> y;
out << bfs01(x, y) << '\n';
}
return 0;
}