Advertisement
SuitNdtie

Journey TASK_154 BUGGED

Mar 12th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.61 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<vector>
  3. #include<queue>
  4. #define INF 2e18
  5. using namespace std;
  6. typedef long long int ll;
  7.  
  8. struct edge{
  9.     int u;
  10.     int v;
  11.     ll w;
  12.     bool operator<(const edge &rhs)const
  13.     {
  14.         return w > rhs.w;
  15.     }
  16. };
  17.  
  18. edge createedge(int u,int v,ll w){
  19.     edge temp;
  20.     temp.u = u;
  21.     temp.v = v;
  22.     temp.w = w;
  23.     return temp;
  24. }
  25.  
  26. int main()
  27. {
  28.     int n,m;
  29.     ll k;
  30.     scanf("%d %d %lld",&n,&m,&k);
  31.     vector<edge> adj[n+1];
  32.     for(int i=0;i<m;i++){
  33.         int u,v;
  34.         ll w;
  35.         scanf("%d %d %lld",&u,&v,&w);
  36.         adj[u].push_back(createedge(u,v,w));
  37.         adj[v].push_back({v,u,w});
  38.     }
  39.    
  40.     //dijkstra
  41.     priority_queue<edge> pq;
  42.     ll dist[n+1];for(int i=0;i<=n;i++)dist[i] = INF;
  43.     int ctn[n+1];for(int i=0;i<=n;i++)ctn[i] = -1;
  44.     bool visited[n+1];for(int i=0;i<=n;i++)visited[i] = false;
  45.     dist[1] = 0;
  46.     ctn[1] = 0;
  47.     pq.push({0,1,dist[1]});
  48.     while(!pq.empty()){
  49.         int tu = pq.top().u;
  50.         int tv = pq.top().v;
  51.         int tw = pq.top().w;
  52.         pq.pop();
  53.         if(!visited[tv]){
  54.             visited[tv] = true;
  55.             for(int i=0;i<adj[tv].size();i++){
  56.                 int nu = adj[tv][i].u;
  57.                 int nv = adj[tv][i].v;
  58.                 int nw = adj[tv][i].w;
  59.                 if(!visited[nv] && dist[tv] + nw < dist[nv]){
  60.                     ctn[nv] = ctn[tv] + 1;
  61.                     dist[nv] = dist[tv] + nw;
  62.                     pq.push({tv,nv,nw});
  63.                 }
  64.             }
  65.         }
  66.     }
  67. /*  for(int i=1;i<=n;i++){
  68.         printf("%d ",dist[i]);
  69.     }printf("\n");
  70.     for(int i=1;i<=n;i++){
  71.         printf("%d ",ctn[i]);
  72.     }*/
  73.     int ans = -1;
  74.     for(int i=1;i<=n;i++){
  75.         if(dist[i] <= k){
  76.             if(ctn[i] > ans){
  77.                 ans = ctn[i];
  78.             }
  79.         }
  80.     }
  81.     printf("%d",ans+1);
  82. }
  83. /*
  84. 5 5 4
  85. 1 3 2
  86. 2 3 1
  87. 2 4 1
  88. 2 5 2
  89. 3 4 4
  90.  
  91. 5 5 0
  92. 1 3 2
  93. 2 3 1
  94. 2 4 1
  95. 2 5 2
  96. 3 4 4
  97.  
  98. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement