Cod sursa(job #2202953)

Utilizator EclipseTepes Alexandru Eclipse Data 10 mai 2018 15:40:52
Problema Ciclu Eulerian Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <string.h>
#define dMAX 100000

using namespace std;

int n, m, x, y, poz, nr, newV, u, p;
vector<pair<int, bool> > graf[dMAX + 2];
int d[dMAX + 2], l;

int from[dMAX * 5 + 2], to[dMAX * 5 + 2];
bool viz[dMAX * 5 + 2], vv;

int xx, yy;

char sir[30];
int idx;

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

void GetInt(int &t) {
    t = 0;
    while (isdigit(sir[idx])) {
        t *= 10;
        t += (int)sir[idx] - '0';
        idx++;
    }
    idx++;
}

void Euler(int v) {
    for (u = 0; u < graf[v].size(); u++) {
        p = graf[v][u].second;
        xx = from[graf[v][u].first];
        yy = to[graf[v][u].first];
        if (p) swap(xx, yy);
        vv = viz[graf[v][u].first];
        if (!vv) {
            viz[graf[v][u].first] = true;
            Euler(yy);
        }
    }
    nr++;
    if (nr <= m)
        fout << v << ' ';
}

int main()
{
    int i, j;
    fin >> n >> m;
    fin.get();
    for (i = 1; i <= m; i++) {
        idx = 0;
        fin.getline(sir, 15);
        GetInt(x);
        GetInt(y);
        l++;
        from[l] = x, to[l] = y;
        graf[x].push_back({l, false});
        graf[y].push_back({l, true});
        d[x]++, d[y]++;
    }
    for (i = 1; i <= n; i++) {
        if (d[i] % 2) {
            fout << -1;
            return 0;
        }
    }
    Euler(1);

    return 0;
}