Cod sursa(job #2119874)

Utilizator ASTELOTudor Enescu ASTELO Data 1 februarie 2018 18:39:02
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
vector <int> lista[100010];
int n,vc[100010],m;
void citire()
{
    int i,n1,n2;
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;i++)
    {
        scanf("%d%d",&n1,&n2);
        vc[n1]++;
        vc[n2]++;
        lista[n1].push_back(n2);
        lista[n2].push_back(n1);
    }
}
int st[100010],sol[100010];
void eulerian()
{   int i,pp,j,k,nod,urm,cate=0;
    pp=1;
    for( i=1;i<=n;i++)
        if(vc[i]%2==1)
            pp=0;
    if(pp==0)
        printf("-1");
    else
    {
        ///i=0;
        k=1;
        st[k]=1;
        while(k>0)
        {
            nod=st[k];
            if(lista[nod].size()>=1)
            {
                urm=lista[nod][lista[nod].size()-1];
                k++;
                st[k]=urm;
                lista[nod].pop_back();
                lista[urm].erase(find(lista[urm].begin(),lista[urm].end(),nod));
            }
            else
            {
                ///if(cate<m)
                ///{
                    cate++;
                    sol[cate]=st[k];
                    k--;
                ///}
            }
        }
        for(int j=1;j<cate;j++)
            printf("%d ",sol[j]);
    }

}
int main()
{
    freopen("ciclueulerian.in","r",stdin);
    freopen("ciclueulerian.out","w",stdout);
    citire();
    eulerian();
    return 0;
}