Cod sursa(job #3223993)

Utilizator RobertAcAcatrinei Robert-Marian RobertAc Data 14 aprilie 2024 12:06:42
Problema Obiective Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#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 = 16005;

int dist[nmax][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';
    }
}