Cod sursa(job #1115647)

Utilizator nicnic28nichita trita nicnic28 Data 21 februarie 2014 22:16:18
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
const int N=100001,M=500001;

struct Nod{
	int y,i;
	Nod(int a, int b){
		y=a;
		i=b;
	}
};
vector<Nod> g[N];
vector<int> s;
bool edge[M];
int n,m;
void dfs(){
	int x;
	for(int i=1 ; i<=n ; i++){
		if(g[i].size() & 1){
			out<<"-1\n";
			return;
		}
	}
	s.push_back(1);
	while(!s.empty()){
		x=s.back();
		while(!g[x].empty() && edge[g[x].back().i]){
			g[x].pop_back();
		}
		if(!g[x].empty()){
			edge[g[x].back().i]=true;
			s.push_back(g[x].back().y);
		} else {
			s.pop_back();
			out<<x<<' ';
		}
	}
}
int main(){
	int x, y;
	in>>n>>m;
	for(int i=1 ; i<=m ; i++){
		in>>x>>y;
		g[x].push_back(Nod(y,i));
		g[y].push_back(Nod(x,i));
	}
	dfs();
	return 0;
}