Advertisement
Infiniti_Inter

322

Jul 8th, 2019
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.08 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3.  
  4.  
  5. #include <iostream>
  6. #include <vector>
  7. #include <algorithm>
  8. #include <set>
  9. #include <map>
  10. #include <string>
  11. #include <cmath>
  12. #include <climits>
  13. #include <iomanip>
  14. #include <stack>
  15. #include <queue>
  16.  
  17. using namespace std;
  18.  
  19.  
  20. #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
  21. #define forn(i, n) for(int i = 0; i < (int)n; ++i)
  22. #define rofn(i, n) for(int i = (int) n - 1; i >= 0; --i)
  23. #define forab(i, a, b) for (int i = (int)a; i < (int)b; ++i)
  24. #define pb push_back
  25. #define mp make_pair
  26. #define all(a) a.begin(), a.end()
  27. #define rall(a) a.rbegin(), a.rend()
  28. #define vi(a, n) vector<int> a(n);
  29.  
  30.  
  31. typedef long long ll;
  32.  
  33. const int N = 100000;
  34.  
  35. const ll INF64 = 5e18 + 13;
  36. const int INF = 1e9 + 13;
  37.  
  38.  
  39. struct edge {
  40.  
  41.     ll a, b, cost;
  42. };
  43.  
  44. int main()
  45. {
  46. #ifdef _DEBUG
  47.     freopen("input.txt", "r", stdin);
  48.     //freopen("output.txt", "w", stdout);
  49. #endif
  50.     IOS;
  51.     int n, m;
  52.     int s;
  53.     cin >> n >> m >> s;
  54.     s--;
  55.     vector<edge> e;
  56.     vector<vector<int> > g(n);
  57.     forn(i, m)
  58.     {
  59.         edge cur;
  60.         cin >> cur.a >> cur.b >> cur.cost;
  61.         cur.a--;
  62.         cur.b--;
  63.         g[cur.a].pb(cur.b);
  64.         e.pb(cur);
  65.     }
  66.     vector<ll> d(n, INF64);
  67.     int v = s;
  68.     d[v] = 0;
  69.     for (int i = 0;i < n - 1; ++i) {
  70.         for (int j = 0; j < m; ++j)
  71.             if (d[e[j].a] < INF64)
  72.                 if (d[e[j].b] > d[e[j].a] + e[j].cost)
  73.                     d[e[j].b] = d[e[j].a] + e[j].cost;
  74.     }
  75.     queue<int> q;
  76.     for (int i = 0; i < 1; ++i) {
  77.         for (int j = 0; j < m; ++j)
  78.             if (d[e[j].a] < INF64)
  79.                 if (d[e[j].b] > d[e[j].a] + e[j].cost) {
  80.                     d[e[j].b] = max(1LL-INF, d[e[j].a] + e[j].cost);
  81.                     q.push(e[j].a);
  82.                 }
  83.     }
  84.     vector<bool> used(n);
  85.     while (!q.empty())
  86.     {
  87.         int v = q.front();
  88.         q.pop();
  89.         for (int i = 0; i < g[v].size(); ++i)
  90.         {
  91.             int to = g[v][i];
  92.             if (!used[to])
  93.             {
  94.                 used[to] = true;
  95.                 d[to] = -INF64;
  96.                 q.push(to);
  97.             }
  98.         }
  99.     }
  100.  
  101.  
  102.  
  103.     for (int i = 0; i < n; ++i)
  104.         if (d[i] == INF64)
  105.             cout << "*\n";
  106.         else if (d[i] == -INF64)
  107.             cout << "-\n";
  108.         else
  109.             cout << d[i] << endl;
  110.     // вывод d, например, на экран
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement