Advertisement
Guest User

Untitled

a guest
Jul 2nd, 2015
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. const int INF = 2 *10000000;
  8.  
  9. int main() {
  10. int n, m, v;
  11. int flag = 1;
  12. cin >> n;
  13. vector< vector <pair<int, int>> > g;
  14. vector <pair<int, int>> h;
  15. int n1, n2, r;
  16. for(int i = 0; i < n; ++i) {
  17. for(int j = 0; j < n; ++j) {
  18. cin >> n1;
  19. if(n1 != 100000) {
  20. h.push_back(make_pair(j, n1));
  21. }
  22. }
  23. g.push_back(h);
  24. h.clear();
  25. }
  26. vector <int> prev (n);
  27. for(int i = 0; i < n; ++i) {
  28. prev[i] = i;
  29. }
  30. int x;
  31. vector<int> d(n, 0);
  32. for(int i = 0; i < n ; ++i){
  33. bool smth = false;
  34. for(int j = 0; j < n; ++j)
  35. for(int k = 0; k < g[j].size(); ++k)
  36. if(d[j] + g[j][k].second < d[g[j][k].first] ) {
  37. d[g[j][k].first] = d[j] + g[j][k].second;
  38. if(d[g[j][k].first] < -INF) {
  39. d[g[j][k].first] = -INF;
  40. }
  41. prev[g[j][k].first] = j;
  42. smth = true;
  43. if(i == n - 1) {
  44. flag = 0;
  45. x = g[j][k].first;
  46. cout << x << " ";
  47.  
  48. }
  49. }
  50. if(!smth) break;
  51. }
  52. for(int i = 0; i < n; ++i)
  53. x = prev[x];
  54. cout << x << " ";
  55. int y = x;
  56. vector <int> answer;
  57. while(prev[y] != x) {
  58. answer.push_back(y);
  59. y = prev[y];
  60. }
  61. answer.push_back(prev[y]);
  62. if(flag == 0) {
  63. cout << "YES";
  64. } else {
  65. cout << "NO";
  66. }
  67. cout << endl;
  68. cout << answer.size() << endl;
  69. for(auto c : answer)
  70. cout << c << " ";
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement