Bus Trip 50/100

Ho provato a svolgere il problema “Bus Trip” utilizzando l’algoritmo di Dijkstra. Tutto va bene nei primi 3 test case ma nel quarto e nel quinto alcuni output vengono segnati come errati. Potreste darmi una mano?
Lascio qui sotto la mia soluzione e in allegato un immagine dei test case 4 e 5.
Grazie in anticipo.

#include <iostream>
#include <vector>
#include <set>

struct busTrip{
    int arrive, tStart, tArrive;
};

int Dijkstra(std::vector <std::vector <busTrip>> &bus, int start, int arrive){
    std::vector <bool> visited (bus.size());
    std::vector <int> weight (bus.size(), -1);
    std::set <int> coda;
    weight[start] = 0;
    coda.insert(start);
    
    while(!coda.empty()){
        int current = *coda.begin();
        if(current == arrive)
            break;
        visited[current] = true;
        coda.erase(coda.begin());
        for(auto trip : bus[current]){
            if(!visited[trip.arrive] && weight[current] <= trip.tStart && (weight[trip.arrive] == -1 || trip.tArrive < weight[trip.arrive])){
                weight[trip.arrive] = trip.tArrive;
                coda.insert(trip.arrive);
            }
        }
    }

    return weight[arrive];
}

int main(){
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);

    int N, S, E, M;
    std::cin >> N >> S >> E >> M;
    std::vector <std::vector <busTrip>> bus (N);

    for(int i = 0; i < M; i++){
        int start;
        busTrip trip;
        std::cin >> start >> trip.tStart >> trip.arrive >> trip.tArrive;
        bus[start].push_back(trip);
    }

    int result = Dijkstra(bus, S, E);

    if(result == -1)
        std::cout << "IMPOSSIBLE";
    else
        std::cout << result;
}

Cattura

Che cosa vuoi estrarre dalla coda: la città che ha identificativo minore, o quella alla quale arrivi prima?

Che errore stupido, grazie mille per l’aiuto