Cod sursa(job #2562132)

Utilizator andaraluca2001Anda Epure andaraluca2001 Data 29 februarie 2020 12:25:54
Problema Ciclu Eulerian Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>

using namespace std;

ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
const int N=100001;
const int M=500001;
int lst[N],urm[2*M],edges[2*M],ciclu[M],nc,nr,n,m,ok;
struct muchie
{
    int x,y;
    bool sters;
};
muchie vm[M];
void dfs(int x)
{
      muchie e;
      int y;
      for(int p=lst[x];p!=0;p=urm[p])
      {
            e=vm[edges[p]];
            if(e.sters) continue;
            y=e.x+e.y-x;
            vm[edges[p]].sters=true;
            lst[x]=urm[p];
            dfs(y);
      }

      ciclu[nc++]=x;
}
int main()
{
    in>>n>>m;

    for(int i=0;i<m;i++)
    {
         in>>vm[i].x>>vm[i].y;
         edges[++nr]=i;
         urm[nr]=lst[vm[i].x];
         lst[vm[i].x]=nr;
         edges[++nr]=i;
         urm[nr]=lst[vm[i].y];
         lst[vm[i].y]=nr;

    }



    dfs(1);

    for(int i=0;i<m;i++) if(vm[i].sters==false) {ok=1;break;}
    if(ok==1) out <<"nu exista";
    else{
    for(int i=0;i<nc;i++) out<<ciclu[i]<<" ";
    }
    return 0;
}