Cod sursa(job #1995048)

Utilizator flaviu_2001Craciun Ioan-Flaviu flaviu_2001 Data 26 iunie 2017 21:34:46
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <vector>
#include <stack>

using namespace std;

vector<int> v[100005], sol;
int n, m, to[500005], from[500005];
bool ok[500005];

int main()
{
    ifstream fin ("ciclueuler.in");
    ofstream fout ("ciclueuler.out");
    fin >> n >> m;
    for (int i = 0; i < m; ++i){
        int x, y;
        fin >> x >> y;
        v[x].push_back(i);
        v[y].push_back(i);
        from[i] = x;
        to[i] = y;
    }
    for (int i = 1; i <= n; ++i)
        if(v[i].size() % 2 == 1){
            fout << "-1\n";
            fin.close();
            fout.close();
            return 0;
        }
    stack<int> q;
    q.push(1);
    while(!q.empty()){
        int k = q.top();
        if(v[k].size() == 0){
            q.pop();
            sol.push_back(k);
        }else{
            int e = v[k].back();
            v[k].pop_back();
            if(!ok[e]){
                ok[e] = 1;
                int qnxt = from[e];
                if(k == from[e])
                    qnxt = to[e];
                q.push(qnxt);
            }
        }
    }
    for (unsigned i = 0; i < sol.size()-1; ++i)
        fout << sol[i] << " ";
    fin.close();
    fout.close();
    return 0;
}