Cod sursa(job #2016498)

Utilizator cipri321Marin Ciprian cipri321 Data 29 august 2017 15:45:40
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
#include <set>
#include <stack>
#include <vector>
#define DIM 100001
using namespace std;
ifstream fi("ciclueuler.in");
ofstream fo("ciclueuler.out");
int n,m;
vector<int> V[DIM],REZ;
pair<int,int> M[5*DIM];
bool VIZ[5*DIM],ok=true;
stack<int> S;
int main()
{
    fi>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int a,b;
        fi>>a>>b;
        V[a].push_back(i);
        V[b].push_back(i);
        M[i]=make_pair(a,b);
    }
    for(int i=1;i<=n;i++)
        if(V[i].size()==0 || V[i].size()%2==1)
            ok=false;
    if(!ok)
        fo<<-1;
    else
    {
        S.push(1);
        while(!S.empty())
        {
            int v=S.top();
            int i=0;
            while(i<V[v].size()&&VIZ[V[v][i]])
                i++;
            if(i==V[v].size())
            {
                S.pop();
                REZ.push_back(v);
            }
            else
            {
                int to=M[V[v][i]].first;
                if(to==v && M[V[v][i]].first!=M[V[v][i]].second)
                    to=M[V[v][i]].second;
                VIZ[V[v][i]]=true;
                S.push(to);
            }
        }
        for(int i=0;i<REZ.size();i++)
            fo<<REZ[i]<<" ";
    }
    fi.close();
    fo.close();
    return 0;
}