Cod sursa(job #1879843)

Utilizator KOzarmOvidiu Badea KOzarm Data 15 februarie 2017 10:38:19
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <vector>
#include <stack>

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

vector <int> G[100005];
stack <int> s;
int n,m,ttl;
bool viz[100005];

bool dfs1(int poz)
{
    vector <int>::iterator it;
    viz[poz]=1;
    ttl++;
    for(it=G[poz].begin();it!=G[poz].end();it++)
    if(!viz[*it])
    {
        bool ok=dfs1(*it);
        if(ok==0)
            return 0;
    }
    return 1;
}


void dfs(int i)
{
    vector <int>::iterator it,it1;
    for(it=G[i].begin();it!=G[i].end();it++)
    {
        s.push(*it);
        int x=*it;
        G[i].erase(it);
        for(it1=G[x].begin();it1!=G[x].end();it1++);
        if(*it1==i)
        {
            G[x].erase(it1);
            break;
        }
        dfs(x);
    }
    while(G[s.top()].size()==0)
    {
        fout<<s.top();
        s.pop();
    }
}



int main()
{
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y;
        fin>>x>>y;
        G[x].push_back(y);
        G[y].push_back(x);
    }
    bool ok=dfs1(1);
    if(ttl<n||!ok)
    {
        fout<<"-1";
        return 0;
    }
    s.push(1);
    dfs(1);

    return 0;
}