Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.62 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <queue>
  4.  
  5. using namespace std;
  6.  
  7. const long long INF = 1000000000000;
  8.  
  9. int main()
  10. {
  11.     int n, m, s, f, a, b;
  12.     cin >> n >> m;
  13.     vector< vector < pair <int, int> > > g(n + 5);
  14.     cin >> s >> f;
  15.     for (int i = 0; i < m; i++)
  16.     {
  17.         int x, y, d;
  18.         cin >> x >> y >> d;
  19.         g[x - 1].push_back(make_pair(y - 1, d));
  20.         g[y - 1].push_back(make_pair(x - 1, d));
  21.     }
  22.     cin >> a >> b;
  23.     queue<int> q;
  24.     q.push(s - 1);
  25.     vector<long long> d(n);
  26.     for (int i = 0; i < n; i++)
  27.         d[i] = INF;
  28.     d[s - 1] = 0;
  29.     while (!q.empty())
  30.     {
  31.         int v = q.front();
  32.         q.pop();
  33.         for (size_t i = 0; i < g[v].size(); ++i)
  34.         {
  35.             int to = g[v][i].first;
  36.             if ((d[v] + g[v][i].second < d[to]) && g[v][i].second >= b)
  37.             {
  38.                 q.push(to);
  39.                 d[to] = d[v] + g[v][i].second;
  40.             }
  41.         }
  42.     }
  43.     vector<long long> d1(n);
  44.     for (int i = 0; i < n; i++)
  45.         d1[i] = INF;
  46.     d1[s - 1] = 0;
  47.     q.push(s - 1);
  48.     while (!q.empty())
  49.     {
  50.         int v = q.front();
  51.         q.pop();
  52.         for (size_t i = 0; i < g[v].size(); ++i)
  53.         {
  54.             int to = g[v][i].first;
  55.             if ( (d1[v] + g[v][i].second < d1[to]) && g[v][i].second <= a)
  56.             {
  57.                 q.push(to);
  58.                 d1[to] = d1[v] + g[v][i].second;
  59.             }
  60.         }
  61.     }
  62.     if (d[f - 1] == INF && d1[f - 1] == INF)
  63.         cout << -1;
  64.     else if (d[f - 1] < d1[f - 1])
  65.         cout << d[f - 1];
  66.     else
  67.         cout << d1[f - 1];
  68.     return 0;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement