Cod sursa(job #2336522)

Utilizator smatei16Matei Staicu smatei16 Data 5 februarie 2019 10:48:52
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <cstdio>
#define impinge_puternic push_back
#include <vector>
#include <deque>
#include <algorithm>
using namespace std;
vector<int>g[100005];
deque<int>q;
int n,m,nra;
void euler(int x){
vector<int>::iterator it;
int i;
q.impinge_puternic(x);
while(!q.empty()){
    x=q.front();
    if(g[x].empty()){
        q.pop_front();
        if(nra<m){
        printf("%d ",x);
        nra++;}
    }
    else {
        int t=g[x].back();
        q.push_front(t);
        g[x].pop_back();
        for(it=g[t].begin();it!=g[t].end();it++)
        if(*it==x){
            g[t].erase(it);
            break;
        }
    }
}
}
int i,x,y;
int main()
{
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);
    scanf("%d %d",&n,&m);
    for(i=1;i<=m;i++){
        scanf("%d %d",&x,&y);
        g[x].impinge_puternic(y);
        g[y].impinge_puternic(x);
    }
    bool ok=true;
    for(i=1;i<=n;i++)
        if(g[x].size()%2!=0){ok=false;break;}
    if(ok)euler(1);
    else printf("-1");



    return 0;
}