Cod sursa(job #1979752)

Utilizator Chirita_MateiChirita Matei Chirita_Matei Data 11 mai 2017 12:18:22
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 100010
#define MMAX 500010
using namespace std;
ofstream fout("ciclueuler.out");
ifstream fin("ciclueuler.in");

vector <pair<int,int> > v[NMAX];
int viz[MMAX], a[NMAX], n, m, x, y, s[MMAX], k, lastpoz[NMAX],ok;

void euler()
{
    s[++k] = 1;

    while(k > 0){
        int nod = s[k];
        int lg = v[nod].size();
        ok = 1;
        for(int i = lastpoz[nod]; i < lg; ++i){
            if(viz[v[nod][i].second] == 0){
                viz[v[nod][i].second] = 1;
                s[++k] = v[nod][i].first;
                lastpoz[nod] = i;
                ok = 0;
                break;
            }
        }

        if(ok == 1) {
            fout << nod << ' ';
            k--;
        }
    }
}

int main()
{
    fin >> n >> m;

    for(int i = 1; i <= m; ++i){
        fin >> x >> y;

        v[x].push_back({y,i});
        v[y].push_back({x,i});

        a[x]++;
        a[y]++;
    }

    for(int i = 1; i <= n; ++i){
        if(a[i]%2 == 1){
            fout << -1;
            return 0;
        }
    }

    euler();

    return 0;
}