Cod sursa(job #950625)

Utilizator bulbulicaAlexandrescu Cristian bulbulica Data 17 mai 2013 13:12:55
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.56 kb
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
#define Nmax 500005

ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");

struct pos{
    int x;
    vector<int>::iterator it;
};

typedef vector<int>::iterator iterator;

vector <int> v[100005];
int par[100005];
stack <pos> stk;
pos p;
vector<int>::iterator it;
int i, j, n, m, x, y, temp;

void citire()
{
    f>>n>>m;
    int a,b;
    for (int i=1;i<=m;++i)
    {
        f>>a>>b;
        v[a].push_back(b);
        v[b].push_back(a);
        par[a]++;
        par[b]++;
    }
}
int main()
{
    citire();
    bool flg=0;
    for (i=1; i<=n; i++)
        if (par[i]%2)
        {
            flg=1;
            break;
        }
    if (flg)
        g<<-1;
    else
    {
        it = v[1].begin(); x=1;
        while (it!=v[x].end()){
            if ((*it)!=0)
            {
                p.x = x; p.it = it;
                stk.push(p);

                temp=*it;
                *it=0;
                for (vector<int>::iterator fit=v[temp].begin();fit!=v[temp].end();fit++)
                    if ((*fit)==x)
                    {
                        *fit=0;
                        break;
                    }
                x=temp;
                it=v[x].begin();
            }
            it++;
            if (it==v[x].end() && !stk.empty())
            {
                g<<x<<" ";
                x=stk.top().x;
                it=stk.top().it;
                stk.pop();
            }
        }
    }
    return 0;
}