Cod sursa(job #1800862)

Utilizator MarcSpataruMarc Spataru MarcSpataru Data 8 noiembrie 2016 11:05:44
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int grad[100001],vec[500001],q[500001],st[500001];
vector <int> v[100001];
int main ()
{
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);
    int n,m,i,j,poz=0,pp=0,numar=0;
    scanf("%d%d",&n,&m);
    int x,y,maxim=0;
    for(i=1;i<=m;i++)
    {
        scanf("%d%d",&x,&y);
        v[x].push_back(y);
        v[y].push_back(x);
        grad[x]++;
        grad[y]++;
    }
    for(i=1;i<=n;i++)
        if(grad[i]%2==1)
            pp=1;
    if(pp==0)
    {
        st[++poz]=1;
        while(numar!=m)
        {
            y=st[poz];
            x=0;
            if(v[y].size()>=1)
                x=v[y][v[y].size()-1];
            if(x!=0)
            {
                v[y].pop_back();
                st[++poz]=x;
                v[x].erase(find(v[x].begin(),v[x].end(),y));
            }
            else
            {
                if(numar<m)
                    printf("%d\n",st[poz]);
                poz--;
                numar++;
            }
        }
    }
    else
        printf("-1");
    return 0;
}