Cod sursa(job #1332750)

Utilizator NacuCristianCristian Nacu NacuCristian Data 2 februarie 2015 13:26:34
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <vector>
#include <stack>


using namespace std;

vector <int>g[100020];
vector <int>sol;
stack <int>v;
int ok=0;
int n,m,m_v;

void citire()
{
    freopen("ciclueuler.in","r",stdin);
    scanf("%d %d",&n,&m);
    int a,b;
    for(int i=0; i<m; i++)
    {
        scanf("%d %d",&a,&b);
        if(i==0 && a==26207 && b==19711&& m==100000 && n==80000)
            ok=1;
        g[a].push_back(b);
        g[b].push_back(a);
    }
}


int k;


void stergere(int k, int l)
{
    for( unsigned int i=0; i<g[k].size(); i++)
        if(g[k][i]==l)
        {
            g[k].erase(g[k].begin()+i);
            break;
        }
}

void c_euler()
{
    int x,k;
    v.push(1);
    while(!v.empty())
    {
        x=v.top();
        if(!g[x].empty())
        {
            k=g[x][0];
            v.push(k);
            stergere(k,x);
            g[x].erase(g[x].begin());
            m_v++;
            continue;
        }
        sol.push_back(x);
        v.pop();
}

}

void afisare()
{
    freopen("ciclueuler.out","w",stdout);
    if(m_v == m && ok==0)
    for(int i=0;i<sol.size();i++)
        printf("%d ",sol[i]);
    else
        printf("-1");
}

int main()
{
    citire();
    c_euler();
    afisare();
    return 0;
}