Pagini recente » Cod sursa (job #2424670) | Cod sursa (job #2454592) | Cod sursa (job #2325099) | Cod sursa (job #3235945) | Cod sursa (job #2357690)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("obiective.in");
ofstream fout("obiective.out");
int n,m,viz1[32003],sol,viz2[320003],OK=1;
vector<int>g[32003],gt[32003];
queue<pair<int,int> >coada;
void dfs(int nod)
{
viz1[nod]=1;
for(vector<int> :: iterator it=g[nod].begin();it!=g[nod].end();it++)
if(viz1[*it]==0)
dfs(*it);
}
void bfs(int xfin)
{
coada.push(make_pair(xfin,0));
while(!coada.empty() && OK)
{
int nod=coada.front().first;
int dist=coada.front().second;
coada.pop();
viz2[nod]=1;
if(viz1[nod])
{
sol=dist;
OK=0;
}
for(vector<int> :: iterator it=g[nod].begin();it!=g[nod].end();it++)
if(viz2[*it]==0)
coada.push(make_pair(*it,dist+1));
}
}
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y;
fin>>x>>y;
g[x].push_back(y);
gt[y].push_back(x);
}
int t,xstart,xfin;
fin>>t;
while(t)
{
for(int i=1;i<=n;i++)
{viz2[i]=0;
viz1[i]=0;}
fin>>xstart>>xfin;
dfs(xstart);
OK=1;
sol=0;
bfs(xfin);
fout<<sol<<'\n';
t--;
}
}