hung_mine

EDGES

Oct 13th, 2019
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.90 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. /// from HUNG MINE with love <3
  4. long long d[100001];
  5. int n, m1, m2, inq[100001], s, t, din[100001], dout[100001];
  6. typedef pair <int, int> ii;
  7. vector <ii> a[100001];
  8. void bell () {
  9.       for (int i = 1; i <= n; ++ i) {
  10.             d[i] = 4e18;
  11.       }
  12.       d[t] = 0;
  13.       queue <int> q;
  14.       q.push (t);
  15.       inq[t] = 1;
  16.       while (q.size ()) {
  17.             int u = q.front ();
  18.             inq[u] = 0;
  19.             q.pop ();
  20.             for (int i = 0; i < a[u].size (); ++ i) {
  21.                   int v = a[u][i].first;
  22.                   long long uv = a[u][i].second;
  23.                   if (d[v] > d[u] + uv) {
  24.                         d[v] = d[u] + uv;
  25.                         if ( !inq[v]) {
  26.                               q.push (v);
  27.                               inq[v] = 1;
  28.                         }
  29.                   }
  30.             }
  31.       }
  32. }
  33. int main () {
  34.       if (fopen ("test.inp", "r")) {
  35.             freopen ("test.inp", "r", stdin);
  36.       }
  37. //      else {
  38. //            freopen ("EDGES.inp", "r", stdin);
  39. //            freopen ("EDGES.out", "w", stdout);
  40. //      }
  41.  
  42.       ios_base :: sync_with_stdio (0);
  43.       cin.tie (0);
  44.       cout.tie (0);
  45.       cin >> n;
  46.       cin >> m1;
  47.       while (m1 --) {
  48.             int x, y;
  49.             cin >> x >> y;
  50.             a[x].push_back (ii (y, 0));
  51.             ++ dout[x];
  52.             ++ din[y];
  53.       }
  54.       cin >> m2;
  55.       while (m2 --) {
  56.             int x, y, z;
  57.             cin >> x >> y >> z;
  58.             a[x].push_back (ii (y, z));
  59.       }
  60.       for (int i = 1; i <= n; ++ i) {
  61.             if (dout[i] == 0) {
  62.                   t = i;
  63.             }
  64.             if (din[i] == 0) {
  65.                   s = i;
  66.             }
  67.       }
  68.       bell ();
  69.       if (d[s] == 4e18) {
  70.             cout << "NO";
  71.       }
  72.       else {
  73.             cout << "YES\n" << d[s];
  74.       }
  75. }
Add Comment
Please, Sign In to add comment