Cod sursa(job #2331306)

Utilizator Gl0WCula Stefan Gl0W Data 29 ianuarie 2019 14:29:35
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <vector>
#define DIM 100005
using namespace std;

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

vector < pair < int, int > > L[DIM];
vector <int> stiva;
int n, m, x, y, grad_nod[DIM], freq[500005];

int main()
{
    fin>>n>>m;
    for(int i = 1; i <= m; i++){
        fin>>x>>y;
        L[x].push_back(make_pair(y, i));
        L[y].push_back(make_pair(x, i));
        grad_nod[x]++;
        grad_nod[y]++;
    }
    for(int i = 1; i <= n; i++){
        if(grad_nod[i] % 2 == 1){
            fout<<-1;
            return 0;
        }
    }
    stiva.push_back(1);
    while(stiva.size()){
        int nod = stiva.back();
        if(grad_nod[nod] == 0){
            if(stiva.size() > 1){
                fout<<nod<<" ";
            }
            stiva.pop_back();
            continue;
        }
        while(freq[L[nod].back().second] == 1){
            L[nod].pop_back();
        }
        int vecin = L[nod].back().first;
        grad_nod[vecin]--; grad_nod[nod]--;
        stiva.push_back(vecin);
        freq[L[nod].back().second] = 1;
        L[nod].pop_back();
    }
    return 0;
}