Estaba haciendo el problema “erdos-darwin” en oiajuez y me da resultado incorrecto en el último caso, creo que el error es por usar vectores demasiado grandes porque nunca había resuelto un problema que use vectores de hasta 100000x100000, acá está el código:
#include <iostream>
#include <vector>
#include <queue>
#include <unordered_set>
#include <algorithm>
using namespace std;
vector<int> BFS(vector<vector<int> > &lista , int nodoInicial) {
int n = lista.size(), t;
queue<int> cola;
vector<int> distancias (n,n);
cola.push(nodoInicial) ;
distancias[nodoInicial] = 0;
while(! cola.empty( )) {
t = cola.front() ;
cola.pop( ) ;
for(int i =0;i<lista [ t ]. size ( ) ; i++){
if (distancias[ lista [ t ][ i ]]==n) {
distancias[ lista [ t ][ i ]] = distancias[ t]+1;
cola.push( lista [ t ][ i ] ) ;
}
}
}
return distancias;
}
int main(){
ios_base::sync_with_stdio(false);
int N, M, d, a, b,sum=0;
sum=0;
vector <int> erdos;
vector <int> darwin;
cin>>N>>M;
vector <vector<int>> grafo(N);
cin>>d;
for(int i=0;i<M;i++){
cin>>a>>b;
grafo[a-1].push_back(b-1);
grafo[b-1].push_back(a-1);
}
erdos=BFS(grafo,0);
darwin=BFS(grafo,N-1);
for(int i=0;i<erdos.size();i++){
if((erdos[i]+darwin[i])<=d){
sum++;
}
}
cout<<sum;
}