Advertisement
Guest User

Untitled

a guest
Jun 24th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int _distance(vector<int> d, vector<bool> separatedSet, int len){
  6.     int min = INT_MAX;
  7.     int min_index;
  8.  
  9.     for (int v = 0; v < len; v++){
  10.         if (!separatedSet[v] && d[v] <= min){
  11.             min = d[v];
  12.             min_index = v;
  13.         }
  14.     }
  15.  
  16.     return min_index;
  17. }
  18.  
  19. long leastTimeToInterview(int n, int k, int m) {
  20.     vector<vector<int>> adj(n, vector<int>(n, 0));
  21.     vector<int> distance(n, INT_MAX);
  22.     vector<bool> spt(n, 0);
  23.  
  24.     distance[0] = 0;
  25.  
  26.     for(int i = 0; i<m; i++){
  27.         int a, b, c;
  28.         cin >> a >> b >> c;
  29.         // Comparing
  30.         if((c < adj[a-1][b-1] || adj[a-1][b-1] == 0) && a!=b){
  31.             adj[a-1][b-1] = c;
  32.             adj[b-1][a-1] = c;
  33.         }
  34.  
  35.     }
  36.  
  37.     for (int i = 0; i < n-1; i++){
  38.  
  39.         int u = _distance(distance, spt, n);
  40.         spt[u] = 1;
  41.  
  42.         int d = distance[u];
  43.  
  44.         if(distance[u]%(2*k)>=k){
  45.             d = d + 2*k - distance[u]%(2*k);
  46.         }
  47.  
  48.  
  49.         for (int v = 0; v < n; v++){
  50.             if (!spt[v] && adj[u][v] && distance[u] != INT_MAX && d + adj[u][v] < distance[v]){
  51.                 distance[v] = d + adj[u][v];
  52.             }
  53.         }
  54.  
  55.     }
  56.  
  57.     return distance[n-1];
  58. }
  59.  
  60.  
  61. int main()
  62. {
  63.     ofstream fout(getenv("OUTPUT_PATH"));
  64.  
  65.     int n;
  66.     cin >> n;
  67.     cin.ignore(numeric_limits<streamsize>::max(), '\n');
  68.  
  69.     int k;
  70.     cin >> k;
  71.     cin.ignore(numeric_limits<streamsize>::max(), '\n');
  72.  
  73.     int m;
  74.     cin >> m;
  75.     cin.ignore(numeric_limits<streamsize>::max(), '\n');
  76.  
  77.     long result = leastTimeToInterview(n, k, m);
  78.  
  79.     fout << result << "\n";
  80.  
  81.     fout.close();
  82.  
  83.     return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement