Cod sursa(job #2152827)

Utilizator marcdariaDaria Marc marcdaria Data 5 martie 2018 20:26:20
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#include <vector>

using namespace std;

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

vector <int> G[100010];
int d[100010], n, st[100010 * 5], viz[100010];

void df(int nod)
{
    viz[nod] = 1;
    for(auto y : G[nod])
        if(!viz[y])
            df(y);
}

bool ok()
{
    for(int i = 1 ; i <= n ; ++i)
        if(!viz[i] || d[i] % 2)
            return 0;
    return 1;
}

int main()
{
    int m, x, y, dr = 0, nod, v;
    fin >> n >> m;
    while(m--)
    {
        fin >> x >> y;
        G[x].push_back(y);
        G[y].push_back(x);
        d[x]++;d[y]++;
    }
    df(1);
    if(!ok())
    {
        fout << "-1\n";
        return 0;
    }
    st[++dr] = 1;
    while(dr)
    {
        nod = st[dr];
        if(G[nod].size())
        {
            v = G[nod][0];
            G[nod].erase(G[nod].begin());
            for(vector <int> :: iterator it = G[v].begin() ; it != G[v].end() ; it++)
                if(*it == nod)
                {
                    G[v].erase(it);
                    break;
                }
            st[++dr] = v;
            continue;
        }
        if(dr-1)
            fout << nod << " ";
        dr--;
    }

}