Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <stdio.h>
- using namespace std;
- int const inf=1e8;
- struct edge{
- int a,b,c;
- };
- struct edge e [10000];
- int d[100];
- int p[100];
- int main()
- {freopen("negcycle.in","r",stdin);
- freopen("negcycle.out","w",stdout);
- int n,m;cin>>n;m=-1;
- for (int i=0;i<n;i++){
- for (int j=0;j<n;j++){
- int x;cin>>x; if (x!=100000){m++;e[m].a=i;e[m].b=j;e[m].c=x;}
- if((i==j)&&(x<0)){cout<<"YES"<<endl<<1<<endl<<i+1;return 0;}
- }}
- int k=-1;
- for (int i=0;i<n;i++){
- k=-1;
- for (int j=0;j<m;j++){
- if (d[e[j].b]>d[e[j].a]+e[j].c){
- d[e[j].b]=max(-inf,d[e[j].a]+e[j].c);
- p[e[j].b]=e[j].a;k=e[j].b;}}}
- if (k==-1){cout<<"NO";}else{
- cout<<"YES"<<endl;
- for(int i=0;i<n;i++){
- k=p[k];
- }
- int y=k;int f=0;
- vector <int> v;
- for(int i=0;i<n;i++){
- if((i!=0)&&(y==k)){break;}else{v.push_back(y);y=p[y];f++;}}
- cout<<f<<endl;f--;
- for(int i=f;i>-1;i--){
- cout<<v[i]+1<<" ";}}
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement