Advertisement
Guest User

Untitled

a guest
May 24th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.40 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <set>
  4. #include <fstream>
  5. using namespace std;
  6. ifstream fin("dijkstra2.in");
  7. ofstream fout("dijkstra2.out");
  8. int drum[100005];
  9. vector<int> G[100005];
  10. vector<int> G_cost[100005];
  11. int n, m , start;
  12. long inf = -1;
  13. void citire()
  14. {
  15.     fin >> n >> m >> start;
  16.     int i;
  17.     for(i = 1; i <= m; i++)
  18.     {
  19.         int x, y, c;
  20.         fin >> x >> y >> c;
  21.         G[x].push_back(y);
  22.         G_cost[x].push_back(c);
  23.         if(c > inf)
  24.             inf = c;
  25.     }
  26.     inf = inf * (n - 1) + 1;
  27. }
  28. void dijsktra()
  29. {
  30.     int i;
  31.     for(i = 1; i <= n; i++)
  32.         drum[i] = inf;
  33.     drum[start] = 0;
  34.     set<pair<int, int>> S;
  35.     S.insert({drum[start], start});
  36.     while(!S.empty())
  37.     {
  38.         int index = (*S.begin()).second;
  39.         S.erase(S.begin());
  40.         int lim = G[index].size();
  41.         for(i = 0; i < lim; i++)
  42.         {
  43.             int vecin = G[index][i];
  44.             if(drum[index] + G_cost[index][i] < drum[vecin])
  45.             {
  46.                 S.erase({drum[vecin], vecin});
  47.                 drum[vecin] = drum[index] + G_cost[index][i];
  48.                 tata[vecin] = index;
  49.                 S.insert({drum[vecin], vecin});
  50.  
  51.             }
  52.         }
  53.     }
  54.  
  55.     for(i = 1; i <= n; i++)
  56.         fout << drum[i] << " ";
  57. }
  58. int main()
  59. {
  60.  
  61.     citire();
  62.     dijsktra();
  63.  
  64.     fin.close();
  65.     fout.close();
  66.     return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement