Pagini recente » Cod sursa (job #640182) | Cod sursa (job #149418) | Borderou de evaluare (job #291206) | Cod sursa (job #457395) | Cod sursa (job #2200393)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#define NMAX 64001
using namespace std;
ifstream fin("obiective.in");
ofstream fout("obiective.out");
vector< pair < int, int > >G[NMAX];
vector < int > Dist[NMAX];
int ans[NMAX],stiva[NMAX],N,M,L,T;
void BFS(int node)
{
for(int i = 1 ; i <= N; i++)
{
ans[i]=-1;
stiva[i]=0;
}
ans[node]=0;
L=1;
stiva[L]=node;
for(int i = 1 ; i <= L ; i++)
{
for(int j = 0 ; j < G[stiva[i]].size(); j++)
{
int vecin=G[stiva[i]][j].first;
if(ans[vecin]==-1)
{
stiva[++L]=vecin;
if(G[stiva[i]][j].second==-1)
ans[stiva[L]]=ans[stiva[i]]+1;
else
ans[stiva[L]]=ans[stiva[i]];
}
}
}
}
int main()
{
fin>>N>>M;
for(int i =1 ; i <= M; i++)
{
int x,y;
fin>>x>>y;
G[x].push_back(make_pair(y,1));
G[y].push_back(make_pair(x,-1));
}
for(int node= 1; node <= N; node++)
{
BFS(node);
Dist[node].push_back(0);
for(int i =1; i <= N; i++)
Dist[node].push_back(ans[i]);
}
fin>>T;
for(; T; T--)
{
int startx,stopy;
fin>>startx>>stopy;
fout<<Dist[startx][stopy]<<" ";
fout<<'\n';
}
fout<<'\n';
}