Cod sursa(job #2557229)

Utilizator emadinuDinu Ema emadinu Data 25 februarie 2020 17:34:05
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include <cstdio>
#include <vector>
using namespace std;

ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
vector<int> v[500001];
int st[500001];
int raspuns[500001];
int main()
{

	int i,n,m,x,y,k=0,ok=0,varf,r=0,next,j,a=0;
	in>>n>>m;
	for(i=1;i<=m;i++){
		in>>x>>y;
		v[x].push_back(y);
		v[y].push_back(x);
	}

	for(i=1;i<=n;i++){
		if(v[i].size()%2==1){
			a=1;
		}
	}

    if (a==0) {
        st[0]=1;
        i=1;
        while (i>0) {
            a=st[i-1];
            if (v[a].size()==0) {
                raspuns[k]=st[i-1];
                i--;
                k++;
            }
            else {
                next=v[a][v[a].size()-1];
                v[a].erase(v[a].end()-1);
                ok=0;
                for (int l=0;l<v[next].size()&&ok==0;l++) {
                    if (v[next][l]==a) {
                        v[next].erase(v[next].begin()+l);
                        ok=1;
                    }
                }
                st[i]=next;
                i++;
            }
        }
        for(i=0;i<k-1;i++){
		out<<raspuns[i]<<" ";
	}
    }
    else out<<-1;
    return 0;
}