Advertisement
lLab__

cube-185

Mar 30th, 2020
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.05 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long int lli;
  4. typedef pair<int,int> pii;
  5.  
  6. int main(){
  7.     int n,m,t,x,y;
  8.     scanf("%d %d %d",&n,&m,&t);
  9.     vector<pii> adj[n+3];
  10.     scanf("%d %d",&x,&y);
  11.     for(int i=0;i<m;++i){
  12.         int u,v,w;
  13.         scanf("%d %d %d",&u,&v,&w);
  14.         adj[u].push_back({v,w});
  15.     }
  16.     priority_queue<pair<lli,pii>,vector<pair<lli,pii>>,greater<pair<lli,pii>>> pq;
  17.     pq.push({0,{x,1}});
  18.     vector<vector<bool>> visited(n+3,vector<bool>(t+1,false));
  19.     while(!pq.empty()){
  20.         lli d = pq.top().first;
  21.         int u = pq.top().second.first;
  22.         int k = pq.top().second.second;
  23.         pq.pop();
  24.         if(k == 0 && u == y){
  25.             printf("%lld",d);
  26.             return 0;
  27.         }
  28.         if(visited[u][k]){
  29.             continue;
  30.         }
  31.         visited[u][k] = true;
  32.         for(auto v : adj[u]){
  33.             if(!visited[v.first][(k+1)%t]){
  34.                 pq.push({d + v.second,{v.first,(k+1)%t}});
  35.             }
  36.         }
  37.     }
  38.     printf("-1");
  39.     return 0;
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement