Cod sursa(job #2200393)

Utilizator IustinPetrariuIustinian Petrariu IustinPetrariu Data 1 mai 2018 11:13:38
Problema Obiective Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#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';


}