Cod sursa(job #2107199)

Utilizator stefdascalescuStefan Dascalescu stefdascalescu Data 16 ianuarie 2018 20:41:12
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <bits/stdc++.h>
#define N 100100
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int n, m, vf, x, y, stk[10 * N];
vector <pair <int, int> > v[N];
pair <int, int> nod;
vector <int> sol;
bool viz[5 * N];
int main(){
    f>> n >> m;
    for(int i = 1; i <= m; i++)
    {
        f>> x >> y;
        v[x].push_back({y, i});
        v[y].push_back({x, i});
    }
    for(int i = 1; i <= n; i++)
        if(v[i].size() & 1)
        {
            g<<-1;
            return 0;
        }
    stk[++vf] = 1;
    while(vf){
        x = stk[vf];
        if(v[x].empty()){
            sol.push_back(x);
            vf--;
            continue;
        }
        nod = v[x].back();
        v[x].pop_back();
        if(!viz[nod.second]){
            viz[nod.second] = 1;
            stk[++vf] = nod.first;
        }
    }
    for(int i=0;i<sol.size()-1;++i)
        g<<sol[i]<<" ";
    return 0;
}