Cod sursa(job #671960)

Utilizator valentin.harsanValentin Harsan valentin.harsan Data 1 februarie 2012 11:30:45
Problema Ciclu Eulerian Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;

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

const int N = 100010;

int n,mm,gr[N],m[N];
vector<pair<int,int> > g[N];

void euler(int nod) {
    int i,t=g[nod][g[nod].size() - 1].first;

    if(g[nod].size()==0)
        return;

    out << t << " ";
    while(m[t]>0) {
        out << t << " ";
        --m[t];
    }
    g[nod].erase(g[nod].begin() + g[nod].size() - 1);
    for(i=0;i!=g[t].size();++i)
        if(g[t][i].first==nod) {
            g[t].erase(g[t].begin() + i);
            break;
        }

    euler(t);
}

int main() {
    int i,a,b;

    in >> n >> mm;

    for(i=1;i<=mm;++i) {
        in >> a >> b;

        if(a==b) {
            m[a]++;
            continue;
        }

        g[a].push_back(pair<int,int>(b,i));
        g[b].push_back(pair<int,int>(a,i));

        ++gr[a]; ++gr[b];
    }

    for(i=1;i<=mm;++i)
        if(gr[i]&1) {
            out << "-1";
            return 0;
        }

    out << "1 ";
    while(m[1]>0) {
        out << "1 ";
        m[1]--;
    }

    euler(1);

    return 0;
}