Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <stdlib.h>
- #include <algorithm>
- using namespace std;
- const int INF = 100000;
- const int MAXT = 50000;
- const int MAXN = 10000;
- typedef pair < int, int> nodo;
- vector <vector<nodo> > adj;
- vector <int> raggiunti[MAXT+1];
- bool fatto[MAXN+1];
- int dist[MAXN+1];
- int main()
- {
- int N,M;
- freopen("input.txt","r",stdin);
- freopen("output.txt","w",stdout);
- cin>>N;
- cin>>M;
- int A[M];
- int B[M];
- int t1[M];
- int t2[M];
- int temp[M];
- for(int i=0;i<M;i++)
- {
- cin>>A[i];
- cin>>B[i];
- cin>>t1[i];
- cin>>t2[i];
- }
- adj.resize(M);
- for (int i=0;i<M;i++)
- {
- adj[A[i]].push_back(make_pair(i,B[i]));
- adj[B[i]].push_back(make_pair(i,A[i]));
- }
- for (int i =0; i<N;i++)
- {
- fatto[i]= false;
- dist[i]=INF;
- }
- raggiunti[0].push_back(0);
- dist[0] = 0;
- for(int t =0;t<=MAXT;t++)
- {
- for(int v : raggiunti[t])
- {
- if(!fatto[v])
- {
- for(const auto& arco : adj[v])
- {
- int scala = arco.first;
- int sala_raggiunta = arco.second;
- int tempo = max(dist[v], t1[scala])+1;
- if(!fatto[sala_raggiunta] & dist[v] < t2[scala] & tempo < dist[sala_raggiunta])
- {
- dist[sala_raggiunta]=tempo;
- raggiunti[tempo].push_back(sala_raggiunta);
- }
- }
- fatto[v] = true;
- }
- }
- }
- int soluzione =(dist[N-1] == INF)? -1 : dist[N-1];
- cout<<soluzione;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement