INTERRUTTORI(terry) return value 3221225477

Stavo provando a risolvere il problema interruttori(terry) ma mi crasha in un determinato punto non so perchè ho provato a usare un compilatore online e mi da lo stesso problema ma al test case successivo

#include <bits/stdc++.h>

using namespace std;

void solve(int t) {
    int N, A, B;
    cin >> N >> A >> B;

    vector<int> Z(A), X(B), Y(B);
    
    for (int i = 0; i < A; i++) {
        cin >> Z[i];
    }

    for (int i = 0; i < B; i++) {
        cin >> X[i] >> Y[i];
    }

    int idx = 42; // memorizza qui l'indice della lampadina
    int num = 42; // memorizza qui il numero di interruttori

    // aggiungi codice...
    vector<vector<int>>lda(N);
    for(int i = 0;i<N;i++){
    	lda[X[i]].push_back(Y[i]); // crash
    	lda[Y[i]].push_back(X[i]);
	}
	int max = 0;
	queue<int>q;
	bool v[N];
	int dist[N];
	for(int i = 0;i<N;i++)dist[i] = N;
	for(int j : Z){
		for(int k = 0;k<N;k++)v[k] = false;
		q.push(j);
		dist[j] = 0;
		while(!q.empty()){
			int n = q.front();
			q.pop();
			v[n] = true;
			for(int i : lda[n]){
				if(!v[i] && (dist[n]+1)<dist[i]){
				q.push(i);
				dist[i] = dist[n]+1;
				}
			}
		}
	}
	for(int i = 0;i<N;i++){
		if(max<dist[i]){
			max = dist[i];
			idx = i;
			num = max;
		}
	}
    cout << "Case #" << t << ": " << idx << " " << num+1 << "\n";
}

int main() {
    // se preferisci leggere e scrivere da file
    // ti basta decommentare le seguenti due righe:

    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);

    int T;
    cin >> T;

    for (int t = 1; t <= T; t++) {
        solve(t);
    }

    return 0;
}

4

4 1 4
1
0 1
0 2
1 2
3 2

6 3 7
0
4
1
0 1
3 2
1 3
0 3
3 4
4 5
2 5

5 1 4
4
0 1
1 2
2 3
3 4

2 2 1
0
1
0 1

// N = 5, B = 4
vector<int> Z(A), X(B), Y(B);
[...]
for(int i = 0;i<N;i++){
    lda[X[i]].push_back(Y[i]); // crash
    lda[Y[i]].push_back(X[i]);
}

i parte da 0 ed arriva a 4. X possiede 4 elementi, indicizzati da 0 a 3, X[4] e’ un’operazione illegale. Stessa cosa per Y.