Cod sursa(job #1783317)

Utilizator jason2013Andronache Riccardo jason2013 Data 18 octombrie 2016 22:14:23
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include<bits/stdc++.h>

using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");

int n,m,st=0,a[500010];

vector<int> v[100005];
stack<int> eul;


int main()
{
    int i, j, nod1, nod2;
    in>>n>>m;
    for(int k = 0; k < m; k++)
    {
        in>>i>>j;
        v[i].push_back(j);
        v[j].push_back(i);
    }

    int imp = 0;
    for(i = 1; i <= n ; i++)
    {
        if(v[i].size() % 2 != 0){
            imp = 1; break;
        }
    }
    if(imp)
        out<<-1;
    else
    {
        eul.push(1);
        while(!eul.empty())
        {
            nod1 = eul.top();
            if(v[nod1].size())
            {
                nod2 = v[nod1].back();
                v[nod1].pop_back();
                v[nod2].erase(find(v[nod2].begin(), v[nod2].end(), nod1)); // stergem ce se repeta
                eul.push(nod2);
            }else
            {
                a[st++] = nod1;
                eul.pop();
            }
        }
    }
    for(int i = 0; i <= st - 1; i++)
        out<<a[i]<<" ";
    in.close();
    out.close();
    return 0;
}