Ankit_132

E

Oct 22nd, 2023
417
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.53 KB | None | 0 0
  1.  
  2. #include <bits/stdc++.h>
  3.  
  4. using namespace std;
  5.  
  6. #define ll     long long
  7. #define pb     push_back
  8.  
  9. int main()
  10. {
  11.     int n, t;
  12.     cin>>n>>t;
  13.  
  14.     vector<vector<int>> graph(n);
  15.     map<pair<int, int>, vector<int>> edgesTime;
  16.  
  17.     for(int j=0; j<t; j++)
  18.     {
  19.         int m;
  20.         cin>>m;
  21.  
  22.         for(int i=0, u, v; i<m; i++)
  23.         {
  24.             cin>>u>>v;
  25.             u--, v--;
  26.  
  27.             graph[u].pb(v);
  28.             graph[v].pb(u);
  29.  
  30.             edgesTime[{u, v}].pb(j+1);
  31.             edgesTime[{v, u}].pb(j+1);
  32.         }
  33.     }
  34.  
  35.     int k;
  36.     cin>>k;
  37.  
  38.     vector<int> a(k);
  39.     for(auto &e: a)     cin>>e;
  40.  
  41.     vector<set<int>> next(t+1);
  42.     for(int i=0; i<k; i++)
  43.         next[a[i]].insert(i+1);
  44.  
  45.     vector<int> dist(n, 1e9);
  46.  
  47.     dist[0] = 1;
  48.  
  49.     set<pair<int, int>> sp;
  50.     sp.insert({dist[0], 0});
  51.     int tmp;
  52.  
  53.     while(sp.size())
  54.     {
  55.         auto [d, u] = *sp.begin();
  56.         sp.erase(sp.begin());
  57.  
  58.         if(dist[u] < d)     continue;
  59.  
  60.         for(auto v: graph[u])
  61.         {
  62.             tmp = 1e9;
  63.  
  64.             for(auto poss: edgesTime[{u, v}])
  65.             {
  66.                 if(next[poss].lower_bound(d) == next[poss].end())       continue;
  67.                 tmp = min(tmp, *next[poss].lower_bound(d));
  68.             }
  69.  
  70.             tmp++;
  71.  
  72.             if(dist[v] > tmp)
  73.             {
  74.                 dist[v] = tmp;
  75.                 sp.insert({tmp, v});
  76.             }
  77.         }
  78.     }
  79.  
  80.     if(dist[n-1] == 1e9)        dist[n-1] = 0;
  81.  
  82.     cout<<dist[n-1]-1<<"\n";
  83. }
  84.  
Advertisement
Add Comment
Please, Sign In to add comment