Cod sursa(job #2500025)

Utilizator ialexia_ioanaAlexia Ichim ialexia_ioana Data 27 noiembrie 2019 10:00:20
Problema Obiective Scor 5
Compilator cpp-64 Status done
Runda guritza Marime 1.3 kb
#include <cstdio>
#include <vector>
using namespace std;
const int NMAX=32005;
vector <int> g[NMAX];
vector <int> r[NMAX];
bool viz[NMAX];
int cost, n, m, t;
void RESET()
{
    for(int i=0; i<=n+2; i++)
        viz[i]=0;
}
void dfs(int u)
{
    int v;
    viz[u]=1;
    for(int i=0; i<g[u].size(); i++)
    {
        v=g[u][i];
        if(!viz[v])
            dfs(v);
    }
}
void DFS(int u, int w)
{
    int v;
    viz[u]=1;
    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);
    }
    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);
        if(!viz[v])
            DFS(u, v);
        printf("%d\n", cost);
    }
    return 0;
}