Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <vector>
- using namespace std;
- const int INF = 2 *10000000;
- int main() {
- int n, m, v;
- int flag = 1;
- cin >> n;
- vector< vector <pair<int, int>> > g;
- vector <pair<int, int>> h;
- int n1, n2, r;
- for(int i = 0; i < n; ++i) {
- for(int j = 0; j < n; ++j) {
- cin >> n1;
- if(n1 != 100000) {
- h.push_back(make_pair(j, n1));
- }
- }
- g.push_back(h);
- h.clear();
- }
- vector <int> prev (n);
- for(int i = 0; i < n; ++i) {
- prev[i] = i;
- }
- int x;
- vector<int> d(n, 0);
- for(int i = 0; i < n ; ++i){
- bool smth = false;
- for(int j = 0; j < n; ++j)
- for(int k = 0; k < g[j].size(); ++k)
- if(d[j] + g[j][k].second < d[g[j][k].first] ) {
- d[g[j][k].first] = d[j] + g[j][k].second;
- if(d[g[j][k].first] < -INF) {
- d[g[j][k].first] = -INF;
- }
- prev[g[j][k].first] = j;
- smth = true;
- if(i == n - 1) {
- flag = 0;
- x = g[j][k].first;
- cout << x << " ";
- }
- }
- if(!smth) break;
- }
- for(int i = 0; i < n; ++i)
- x = prev[x];
- cout << x << " ";
- int y = x;
- vector <int> answer;
- while(prev[y] != x) {
- answer.push_back(y);
- y = prev[y];
- }
- answer.push_back(prev[y]);
- if(flag == 0) {
- cout << "YES";
- } else {
- cout << "NO";
- }
- cout << endl;
- cout << answer.size() << endl;
- for(auto c : answer)
- cout << c << " ";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement