Advertisement
Kekulidze

Untitled

Jan 22nd, 2020
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. #include <iostream>
  2. #include<algorithm>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. struct edge {
  8. int a, b, cost;
  9. };
  10. vector<vector<int>> matrix;
  11. int n, m=0;
  12. vector<edge> e;
  13. const int INF = 100000;
  14. void solve() {
  15. vector<int> d(n);
  16. vector<int> p(n, -1);
  17. int x;
  18. for (int i = 0; i < n; ++i) {
  19. x = -1;
  20. for (int j = 0; j < m; ++j)
  21. if (d[e[j].b] > d[e[j].a] + e[j].cost)
  22. {
  23. d[e[j].b] = max(-INF, d[e[j].a] + e[j].cost);
  24. p[e[j].b] = e[j].a;
  25. x = e[j].b;
  26. }
  27. }
  28.  
  29. if (x == -1)
  30. cout << "NO";
  31. else {
  32. int y = x;
  33. for (int i = 0; i < n; ++i)
  34. y = p[y];
  35.  
  36. vector<int> path;
  37. for (int cur = y; ; cur = p[cur]) {
  38. path.push_back(cur);
  39. if (cur == y && path.size() > 1) break;
  40. }
  41. reverse(path.begin(), path.end());
  42.  
  43. cout << "YES "<<endl<<path.size()<<endl;
  44. for (size_t i = 0; i < path.size(); ++i)
  45. cout << path[i] +1<< ' ';
  46. }
  47. }
  48.  
  49. int main() {
  50. freopen("input.txt", "r", stdin);
  51. freopen("output.txt", "w", stdout);
  52.  
  53.  
  54. cin >> n;
  55. matrix.resize(n);
  56. for (int i = 0; i < n; i++)
  57. matrix[i].resize(n);
  58.  
  59.  
  60. for (int i = 0; i < n; i++)
  61. for (int j = 0; j < n; j++)
  62. {
  63. cin >> matrix[i][j];
  64. if (INF != matrix[i][j])
  65. {
  66. m++;
  67. edge p = { i,j,matrix[i][j] };
  68. e.push_back(p);
  69. }
  70. }
  71. solve();
  72.  
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement