Cod sursa(job #2358166)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 27 februarie 2019 21:57:43
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");

const int VAL=500005;

int N, M, i, j, F, nr;
int A[VAL], B[VAL], nod;
int st[VAL], top, mch;
bool viz[VAL];
vector <int> G[VAL];
vector <int> :: iterator it;

int main()
{
    fin >> N >> M;
    for (i=1; i<=M; i++)
    {
        fin >> A[i] >> B[i];
        G[A[i]].push_back(i);
        G[B[i]].push_back(i);
    }
    for (i=1; i<=N; i++)
        if (G[i].size() % 2==1)
            nr++;
    if (nr>0)
    {
        fout << -1;
        fin.close();
        fout.close();
        return 0;
    }
    st[1]=top=1;
    while (top>0)
    {
        nod=st[top];
        if (G[nod].size()==0)
        {
            if (top>1)
                fout << nod << " ";
            top--;
        }
        else
        {
            mch=G[nod].back();
            G[nod].pop_back();
            if (viz[mch]==false)
            {
                viz[mch]=true;
                if (A[mch]==nod)
                    st[++top]=B[mch];
                else
                    st[++top]=A[mch];
            }
        }
    }
    fin.close();
    fout.close();
    return 0;
}