Cod sursa(job #2500064)

Utilizator ialexia_ioanaAlexia Ichim ialexia_ioana Data 27 noiembrie 2019 10:42:07
Problema Obiective Scor 5
Compilator cpp-64 Status done
Runda guritza Marime 1.32 kb
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
const int NMAX=32005;
vector <int> g[NMAX];
vector <int> r[NMAX];
bool viz[NMAX];
queue <int> q;
int cost, n, m, t;
int a;

void RESET()
{
    for(int i=0; i<=n+2; i++)
        viz[i]=0;
}
void DFS(int u, int w)
{
    int v;
    q.push(u);
    viz[u]=1;
    a=q.front();
    for(int i=0; i<g[u].size() && !viz[w]; i++)
    {
        v=g[u][i];
        if(!viz[v])
            /*printf("%d %d\n", v, cost), */DFS(v, w);
    }
    a=q.front();
    if(u==q.front())
    {
        q.pop();
        for(int i=0; i<r[u].size() && !viz[w]; i++)
        {
            v=r[u][i];
            if(!viz[v])
                cost++, /*printf("%d %d\n", v, cost), */DFS(v, w);
        }
    }
    //printf("%d\n", cost);
}


int main()
{
    freopen("obiective.in", "r", stdin);
    freopen("obiective.out", "w", stdout);
    int u, v;
    scanf("%d%d", &n, &m);
    for(int i=1; i<=m; i++)
    {
        scanf("%d%d", &u, &v);
        g[u].push_back(v);
        r[v].push_back(u);
    }
    scanf("%d", &t);
    for(int i=1; i<=t; i++)
    {
        scanf("%d%d", &u, &v);
        RESET();
        cost=0;
        DFS(u, v);
        printf("%d\n", cost);
        while(!q.empty())
            q.pop();
    }
    return 0;
}