Cod sursa(job #1935234)

Utilizator victoreVictor Popa victore Data 22 martie 2017 08:55:26
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include<cstdio>
#include<vector>

using namespace std;
const int nmax=100005;
vector <int> g[nmax];
vector <int> st,ans;
int from[5*nmax], to[5*nmax];
bool viz[5*nmax];
int main()
{
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);
    int n,i,m,nod,muchie,u,w;
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;i++)
    {
        scanf("%d%d",&u,&w);
        g[u].push_back(i);
        g[w].push_back(i);
        from[i]=u;
        to[i]=w;
    }
    for(i=1;i<=n;i++)
    {
        if((int)g[i].size()%2)
        {
            printf("-1");
            return 0;
        }
    }
    st.push_back(1);
    while(!st.empty())
    {
        nod=st.back();
        if(!g[nod].empty())
        {
            muchie=g[nod].back();
            g[nod].pop_back();
            if(!viz[muchie])
            {
                viz[muchie]=1;
                if(nod==from[muchie])
                    st.push_back(to[muchie]);
                else
                    st.push_back(from[muchie]);
            }
        }
        else
        {
            st.pop_back();
            ans.push_back(nod);
        }
    }
    for(i=0;i<ans.size();i++)
        printf("%d ",ans[i]);
}