Advertisement
Manioc

dj k star

Feb 2nd, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.42 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define MAX 1007
  3. #define INF 10000007
  4.  
  5. using namespace std;
  6.  
  7. typedef pair<double, int> di;
  8.  
  9.  
  10. vector< vector<di> > grafo;
  11. int n, m, can[MAX], resp_can;
  12. double c, dist[MAX], resp;
  13.  
  14.  
  15. int djkstra(int no){
  16.     priority_queue<di, vector<di>, greater<di> > fila;
  17.  
  18.     dist[no] = 0;
  19.     can[no] = 0;
  20.     fila.push(make_pair(0, no));
  21.     while(!fila.empty()){
  22.         di top = fila.top();
  23.         fila.pop();
  24.  
  25.         double peso = top.first;
  26.         int v = top.second;
  27.         if(dist[v] < peso) continue;
  28.         for(int  i = 0; i < grafo[v].size(); i++){
  29.             di vizinho = grafo[v][i];
  30.             if(dist[vizinho.second] > dist[v] + vizinho.first){
  31.                 dist[vizinho.second] = dist[v] + vizinho.first + c*(vizinho.first >= c);
  32.                 if(vizinho.first >= c) can[vizinho.second] = can[v] + 1;
  33.  
  34.                 printf("%lf\n", dist[vizinho.second]);
  35.                 fila.push(make_pair(dist[vizinho.second], vizinho.second));
  36.             }
  37.         }
  38.     }
  39. }
  40.  
  41. int main(){
  42.     scanf("%d %d %lf",&n, &m, &c );
  43.     resp = 0;
  44.     resp_can = 0;
  45.     grafo.assign(n+1, vector<di> ());
  46.     for(int i = 0; i < m; i++){
  47.         int a, b;
  48.         double d;
  49.         scanf("%d %d %lf",&a, &b, &d );
  50.         grafo[a].push_back(make_pair(d, b));
  51.         grafo[b].push_back(make_pair(d, a));
  52.     }
  53.     djkstra(1);
  54.     //printf("%lf %d", resp, resp_can);
  55.     return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement