Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <vector>
- #define INF 1E+7
- using namespace std;
- int main()
- {
- vector<vector<int>> g;
- vector<int> d, p, a;
- int n;
- int i, j;
- int u, v, w;
- freopen("negcycle.in", "r", stdin);
- freopen("negcycle.out", "w", stdout);
- cin >> n;
- g.resize(n);
- d.assign(n, INF);
- p.assign(n, -1);
- for (i = 0; i < n; i++) {
- for (j = 0; j < n; j++) {
- scanf("%d", &w);
- g[i].push_back(w);
- }
- }
- d[0] = 0;
- for (i = 1; i < n; i++) {
- for (u = 0; u < n; u++) {
- for (v = 0; v < n; v++) {
- if (d[v] > d[u] + g[u][v]) {
- d[v] = d[u] + g[u][v];
- p[v] = u;
- }
- }
- }
- }
- for (u = 0; u < n; u++) {
- for (v = 0; v < n; v++) {
- if (d[v] > d[u] + g[u][v]) {
- a.push_back(v);
- if (p[v] == -1) {
- cout << "YES" << endl;
- cout << 2 << endl;
- cout << v + 1 << " " << v + 1;
- return 0;
- }
- u = p[v];
- while (u != v) {
- a.push_back(u);
- u = p[u];
- }
- a.push_back(u);
- cout << "YES" << endl;
- cout << a.size() << endl;
- for (i = a.size() - 1; i >= 0; i--) {
- printf("%d ", a[i] + 1);
- }
- return 0;
- }
- }
- }
- cout << "NO";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement