Cod sursa(job #2106451)

Utilizator DeleDelegeanu Alexandru Dele Data 15 ianuarie 2018 19:51:50
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
const int NMAX=100005,MMAX=500005;
vector <pair <int,int> > a[NMAX];
stack <int> s;
int grad[NMAX];
int n,m,x,y,i,vf,nr=0;
bool viz[MMAX];
int main()
{
    f>>n>>m;
    for(i=1 ; i<=m ; ++i)
    {
        f>>x>>y;
        a[x].push_back(make_pair(y,i));
        a[y].push_back(make_pair(x,i));
        grad[x]++;
        grad[y]++;
    }
    for(i=1 ; i<=n ; ++i)
        if(grad[i]%2)
        {
            g<<"-1"<<'\n';
            return 0;
        }
    s.push(1);
     while(!s.empty())
    {
        vf=s.top();
        if(a[vf].size())
        {
            x=a[vf].back().first;
            y=a[vf].back().second;
            a[vf].pop_back();
            if(!viz[y])
            {
                viz[y]=1;
                s.push(x);
            }
        }
        else
        {
            s.pop();
            nr++;
            if(nr<=m)
                g<<vf<<" ";
        }
    }
    g<<'\n';
    return 0;
}