Advertisement
DontCallMeNuttoPleas

Osumapping

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