Cod sursa(job #2691307)

Utilizator tryharderulbrebenel mihnea stefan tryharderul Data 28 decembrie 2020 11:06:52
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <bits/stdc++.h>
#define NMAX 500003
#define NMAX2 100003
#define pb push_back

using namespace std;

int n,m;
vector<vector<pair<int,int> > >v(NMAX2);
vector<int>ans;
vector<bool>vis(NMAX,0);

void dfs(int start){
    while(!v[start].empty()){
        int nod=v[start].back().first,edge=v[start].back().second;
        v[start].pop_back();

        if(!vis[edge]){
            vis[edge]=1;
            dfs(nod);
        }
    }

    ans.pb(start);
}



int main()
{
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);

    scanf("%d%d",&n,&m);

    for(int i=1;i<=m;i++){
        int x,y;
        scanf("%d%d",&x,&y);
        v[x].pb(make_pair(y,i));
        v[y].pb(make_pair(x,i));
    }

    for(int i=1;i<=n;i++){
        if(v[i].size()%2==1){
            printf("-1");
            return 0;
        }
    }

    dfs(1);

    for(int i=0;i<ans.size()-1;i++)
        printf("%d ",ans[i]);

    return 0;
}