Cod sursa(job #1801677)

Utilizator stefzahZaharia Stefan Tudor stefzah Data 9 noiembrie 2016 15:00:17
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m,x,y,k,ok,g[500005],viz[500005],sol[500005],g1[500005];
vector<int>v[500005];
void DFS(int q)
   {int i;
    for(i=0;i<g[q];i++)
       if(viz[v[q][i]]==0){k++;viz[v[q][i]]=1;DFS(v[q][i]);}
   }
void DFS1(int q)
   {int i,j,z;
    for(i=0;i<g[q];i++)
       if(v[q][i]!=-1){z=v[q][i];
                       v[q][i]=-1;
                       for(j=0;j<g[z];j++)
                          if(v[z][j]==q){v[z][j]=-1;break;}
                       DFS1(z);
                      }
                      k++;
                      sol[k]=q;
   }
int main()
{int i;
 fin>>n>>m;
 for(i=1;i<=m;i++)
 {fin>>x>>y;
     g[x]++;
     g[y]++;
     v[x].push_back(y);
     v[y].push_back(x);
 }
 for(i=1;i<=n;i++)
   {if(g[i]%2==1)ok=1;
    g1[i]=g[i];
   }
 k=1;
 viz[1]=1;
 DFS(1);
    if(ok==1)fout<<"-1";
    else {k=0;
          DFS1(1);
        for(i=1;i<=m;i++)
           fout<<sol[i]<<" ";
         }
}