Pagini recente » Cod sursa (job #2539209) | Cod sursa (job #3251778) | Cod sursa (job #3187695) | Cod sursa (job #1407727) | Cod sursa (job #3223994)
#include <bits/stdc++.h>
#ifdef LOCAL
#define in cin
#define out cout
#endif
using namespace std;
#ifndef LOCAL
ifstream in("obiective.in");
ofstream out("obiective.out");
#endif
const int nmax = 32005;
unordered_map<int, int> dist[nmax];
vector<int> adj[nmax];
vector<int> revadj[nmax];
bool viz[nmax];
void bfs(int start)
{
deque<int> dq;
memset(viz, 0, sizeof viz);
viz[start] = 1;
dq.push_back(start);
while (!dq.empty())
{
int nod = dq.front();
dq.pop_front();
for (auto i : adj[nod])
{
if (!viz[i])
{
viz[i] = 1;
dist[start][i] = dist[start][nod];
dq.push_front(i);
}
}
for (auto i : revadj[nod])
{
if (!viz[i])
{
viz[i] = 1;
dist[start][i] = dist[start][nod] + 1;
dq.push_back(i);
}
}
}
}
int main()
{
int n, m;
in >> n >> m;
for (int i = 0; i < m; i++)
{
int a, b;
in >> a >> b;
adj[a].push_back(b);
revadj[b].push_back(a);
}
for (int i = 1; i <= n; i++)
{
bfs(i);
}
int q;
in >> q;
for (int i = 0; i < q; i++)
{
int a, b;
in >> a >> b;
out << dist[a][b] << '\n';
}
}