Cod sursa(job #1812084)

Utilizator Bodo171Bogdan Pop Bodo171 Data 21 noiembrie 2016 20:26:17
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include<fstream>
#include<vector>
using namespace std;
const int nmax=100005;
const int mmax=500005;
vector<int> v[nmax];
int a[mmax],b[mmax],G[nmax],ans[mmax],st[mmax];
bool used[nmax];
int node,i,n,m,x,y,u,rasp;
int main()
{
    ifstream f("ciclueuler.in");
    ofstream g("ciclueuler.out");
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>x>>y;
        a[i]=x;
        b[i]=y;
        v[x].push_back(i);
        v[y].push_back(i);
    }
    for(i=1;i<=n;i++)
      {
          if(v[i].size()%2) {g<<"-1";return 0;}
          G[i]=v[i].size()-1;
      }
    u++;st[u]=1;
    while(u>0)
    {
        node=st[u];
        if(G[node]!=-1)
        {
            i=G[node];
            if(!used[v[node][i]])
            {
            u++;
            st[u]=(node xor a[v[node][i]] xor b[v[node][i]]);
            used[v[node][i]]=1;
            }
            G[node]--;
        }else
        {
            u--;
            rasp++;
            ans[rasp]=node;
        }
    }
    if(rasp<=m) {g<<"-1";return 0;}
    for(i=1;i<rasp;i++)
        g<<ans[i]<<' ';
    return 0;
}