Passing reference of vectors gives RE but using global vectors is AC

So I was solving a problem using DFS and came across this abnormality.

First, I wrote this solution:

void dfs(vvi& edges, vi& in_deg, vb& visited, vi& dist, int vertex) {
    visited[vertex] = true;
    iter(to, edges[vertex]) {
        --in_deg[to];
        dist[to] = max(dist[to], dist[vertex]+1);
 
        if (in_deg[to] == 0) {
            dfs(edges, in_deg, visited, dist, to);
        }
    }
}
 
void solve(int testcase) {
    int nvertices, nedges; scanf("%d %d", &nvertices, &nedges);
    vvi edges(nvertices);
    vi in_deg(nvertices);
    fo(_, 0, nedges) {
        int x, y; cin >> x >> y; --x, --y;
        edges[x].PB(y);
        ++in_deg[y];
    }
 
    vb visited(nvertices);
    vi dist(nvertices);
 
    fo(vertex, 0, nvertices) {
        if (not visited[vertex] and in_deg[vertex] == 0) {
            dfs(edges, in_deg, visited, dist, vertex);
        }
    }
 
    deb(dist);
 
    printf("%d\n", *max_element(ALL(dist)));
}

This gave RE. However when I refactored this a bit:

vvi edges;
vi in_deg;
vb visited;
vi dist;
 
void dfs(int vertex) {
    visited[vertex] = true;
    iter(to, edges[vertex]) {
        --in_deg[to];
        dist[to] = max(dist[to], dist[vertex]+1);
 
        if (in_deg[to] == 0) {
            dfs(to);
        }
    }
}
 
void solve(int testcase) {
    int nvertices, nedges; scanf("%d %d", &nvertices, &nedges);
    edges.resize(nvertices);
    in_deg.resize(nvertices);
    visited.resize(nvertices);
    dist.resize(nvertices);
 
    fo(_, 0, nedges) {
        int x, y; scanf("%d %d", &x, &y); --x, --y;
        edges[x].PB(y);
        ++in_deg[y];
    }
 
    fo(vertex, 0, nvertices) {
        if (not visited[vertex] and in_deg[vertex] == 0) {
            dfs(vertex);
        }
    }
 
    printf("%d\n", *max_element(ALL(dist)));
}

This one with the same logic but different declaration of the vectors passes. Any idea why?

(Excuse all the ugly marcos :stuck_out_tongue_closed_eyes:)