Cod sursa(job #2141268)

Utilizator RaduGiucleaGiuclea Radu RaduGiuclea Data 24 februarie 2018 11:34:13
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#include<vector>
using namespace std;
struct muchie{int x;int y;};
vector<int> gf[500002];
bool viz[500002];
int ans[500002],st[500002],grad[500002];
muchie v[500002];
int main()
{
    ifstream f("ciclueuler.in");
    ofstream g("ciclueuler.out");
    int n,m,i;
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
      f>>v[i].x>>v[i].y;
      grad[v[i].x]++;
      grad[v[i].y]++;
      gf[v[i].x].push_back(i);
      gf[v[i].y].push_back(i);
    }
    for(i=1;i<=n;i++)
      if(grad[i]%2)
      {
          g<<"-1";
          return 0;
      }
    int nr=0,k=0,nod,ok;
    st[++k]=1;
    while(k)
    {
      nod=st[k];
      ok=0;
      for(i=0;i<gf[nod].size()&&!ok;i++)
        if(!viz[gf[nod][i]])
        {
          if(v[gf[nod][i]].x==nod)
            st[++k]=v[gf[nod][i]].y;
          else st[++k]=v[gf[nod][i]].x;
          ok=1;
          viz[gf[nod][i]]=1;
        }
        if(!ok)
        {
          k--;
          ans[++nr]=nod;
        }
    }
    for(i=1;i<=nr;i++)
      g<<ans[i]<<" ";
    return 0;
}