Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2020
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.96 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. struct edge {
  7.     int from, to, cost;
  8. };
  9. const int INF = 1e9;;
  10.  
  11. int main() {
  12.     int n;
  13.     int pointer = 0;
  14.     bool flag = false;
  15.     cin >> n;
  16.     vector <edge> E;
  17.     for (int i = 0; i < n; i++) {
  18.         for (int j = 0; j < n; j++) {
  19.             int x;
  20.             cin >> x;
  21.             if (x != 0 && x != 100000) {
  22.                 E.push_back({ i,j,x });
  23.             }
  24.         }
  25.     }
  26.     int x;
  27.     vector<int> d(n, INF), p(n, -1);
  28.     d[0] = 0;
  29.     for (long kek = 0; kek < E.size() && flag == false; kek++)
  30.     {
  31.         for (int i = 0; i < n; i++) {
  32.             x = -1;
  33.             for (int j = 0; j < E.size(); j++) {
  34.                 int from = E[j].from;
  35.                 int to = E[j].to;
  36.                 int cost = E[j].cost;
  37.                 if (d[to] > d[from] + cost) {
  38.                     d[to] = max(d[from] + cost, -INF);
  39.                     p[to] = from;
  40.                     x = to;
  41.                     pointer = j;
  42.                 }
  43.             }
  44.         }
  45.         if (x == -1) {
  46.             cout << "NO" << endl;
  47.             flag = true;
  48.  
  49.         }
  50.         else {
  51.             int y = x;
  52.             for (int i = 0; i < n; i++) {
  53.                 y = p[y];
  54.             }
  55.             vector <int> path;
  56.             for (int cur = y;; cur = p[cur]) {
  57.                 path.push_back(cur);
  58.                 if (cur == y && path.size() > 1) {
  59.                     break;
  60.                 }
  61.             }
  62.             reverse(path.begin(), path.end());
  63.             cout << "YES" << endl;
  64.             cout << path.size() << endl;
  65.             for (int i = 0; i < path.size(); i++) {
  66.                 cout << path[i] + 1;
  67.                 if (i != path.size() - 1) {
  68.                     cout << ' ';
  69.                 }
  70.             }
  71.             cout << endl;
  72.         }
  73.         printf("\n");
  74.         E.erase(E.begin() + pointer);
  75.     }
  76.     return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement