Drawing slashes (43/100) execution killed

Sto uscendo pazzo. Dopo tanto tempo sono ritornato su questo problema che prima mi sembrava impossibile, e ho tirato fuori questo codice:

pair<int, int> sceglinodi(char a, char b){
    if(a == b){
        if(a == '/') return {1, 0};
        return {0, 1};
    }
    if(a == '/') return {1, 1};
    return {0, 0};
}

void dfs(int a, bool visited[],  vector<int> adj[]){
    for (auto u : adj[a]) {
            if (visited[u]) continue;
            visited[u] = true;
            dfs(u, visited, adj);
        }
}


int main(){
    fast();
    /* freopen("output.txt", "r", stdin);
    freopen("slashout.txt", "w", stdout); */
    int x, y; cin >> x >> y;
    int x2 = x*2;
    int nodi = x2 * y; 
    
    vector<int> adj[nodi] = {}; //adj[nodo attuale] = nodo di arrivo
   
    pair<int, int> sotto(0, 0);

    int sopra;
    char oldx, temp;
    
    
    for(int i = 0; i < x; i++){
        cin >> oldx;
        for(int j = 1; j < y; j++){
            cin >> temp;
            sotto = sceglinodi(oldx, temp);

            sopra = ((j-1) * x2 + (2*i));

            int a = sopra + sotto.first, b = sopra + x2 + sotto.second;

            adj[a].push_back(b); //nodi orizzontali
            adj[b].push_back(a); 

            if(i != x-1){
                a = sopra + 1; b = sopra + 2;
                adj[a].push_back(b); //nodi verticali
                adj[b].push_back(a);
            }
            
            oldx = temp;
        }
        if(i != x-1){
                int a = sopra + x2 + 1, b = sopra + x2 + 2;
                adj[a].push_back(b); //nodi verticali
                adj[b].push_back(a); 
            }
    }

    bool visited[nodi] = {false};
    int sol = 0;

    for(int i = 0; i < nodi; i++){
        if(visited[i]) continue;
        visited[i] = true;
       
        dfs(i, visited, adj);
        sol++;
    }
    cout<<sol;
    return 0;
}
    

Bene, l’idea dietro è quella di crearsi una lista di adiacenza e, con molta pazienza, crearsi 2 nodi per ogni slash che hanno archi verso i nodi vicini . Funziona tutto perfettamente. Peccato per 2 testcase che mi danno “execution killed”, e non capisco se davvero si tratta di memoria o no. Suppongo di si essendo che ho provato testcase alti, e se n, m > 201 l’algoritmo crasha. Chiedo solo, devo buttare l’algoritmo? o ci sono modi di ottimizzare la memoria in questo caso?

test cases errati:


Il problema riguarda i vettori adj e visited che probabilmente vengono indicizzati oltre la dimensione. Prova ad aumentarne i valori.
P:S.:
Oltre a rivedere la dimensione dei 2 vector il codice sbaglia anche gli input con M = 1.

Non so come ringraziarti. Cioè io vorrei andare alle nazionali e poi faccio sti errori…