Cod sursa(job #2554702)

Utilizator emadinuDinu Ema emadinu Data 23 februarie 2020 12:03:47
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
#include <cstdio>
#include <vector>

using namespace std;
struct vecini{
	int nod;
	int muchie;
};
int vect[100005];
vector <vecini> v[100005];
int st[500005];
int raspuns[500005];
int main()
{
	ifstream in("ciclueuler.in");
	ofstream out("ciclueuler.out");
	int i,N,M,x,y,k,nr_elem=0,ok,varf;
	vecini a;
	in>>N>>M;
	for(i=1;i<=M;i++){
		in>>x>>y;
		a.nod=y;
		a.muchie=i;
		v[x].push_back(a);
		a.nod=x;
		v[y].push_back(a);
	}
	for(i=1;i<=N;i++){
		if(v[i].size()%2==1){
			out<<"-1";
			return 0;
		}
	}
	k=1;
	st[k]=1;
	while(k>0){
		varf=st[k];
		ok=0;
		for(vector <vecini>:: iterator it=v[varf].begin();it!=v[varf].end() && ok==0;it++){
			a=*it;
			if(vect[a.muchie]==0){
				vect[a.muchie]=1;
				k++;
				st[k]=a.nod;
				ok=1;
			}
		}
		if(ok==0){
			nr_elem++;
			raspuns[nr_elem]=st[k];
			k--;
		}
	}
	if(nr_elem>M+1){
		out<<"-1";
		return 0;
	}
	for(i=2;i<=nr_elem;i++){
		out<<raspuns[i]<<" ";
	}
    return 0;
}