Cod sursa(job #2171596)

Utilizator RazvanGutaGuta Razvan Alexandru RazvanGuta Data 15 martie 2018 12:51:31
Problema Ciclu Eulerian Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
 #include<bits/stdc++.h>
 # define NR 100005
 using namespace std;
 ifstream f("ciclueuler.in");
 ofstream g("ciclueuler.out");
 vector <int> G[NR], st;
 int n,m,ok;
 int grad[NR],viz[NR],val;
void DFS (int k)
{
  viz[k]=1;
 for (int i=0;i<(int)G[k].size();++i)
 if (!viz[G[k][i]])
    DFS(G[k][i]);
 }
 void euler (int k)
 {
   st.push_back(k);
   while(st.size())
   {
       k=st.back();
       if(G[k].size())
       {
           int y=G[k].back();
           G[k].pop_back();
           st.push_back(y);
           G[y].erase(find(G[y].begin(),G[y].end(),k));
       }
       else
       {
           ok++;
           if(ok==1)
            val=k,g<<k<<" ";
           if(val!=k)
           g<<k<<" ";
           st.pop_back();
       }
   }
 }
 int main ()
 {
 int i,x,y;
 f>>n>>m;
 for (i=1;i<=m;++i)
 {
 f>>x>>y;
 G[x].push_back(y);
 ++grad[x];
 G[y].push_back(x);
 ++grad[y];
 }
 DFS(1);
 for(i=1;i<=n;++i)
 if (grad[i]%2==1||viz[i]==0)
 {
 g <<-1;
 return 0;
 }
 euler (1);
 g<<'\n';
 return 0;
 }