Cod sursa(job #390168)

Utilizator ConsstantinTabacu Raul Consstantin Data 3 februarie 2010 11:00:22
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<stdio.h>
#include<vector>
using namespace std;
vector<pair<int,int> > v[ 100010 ];
int i,j,k,l,m,n,g[ 100010 ],s[ 100010 * 5],a,b;
bool viz[ 500010 ];
void euler(){
static int k=0;
s[++k] = 1; 
int x;
while(k){
	x = s[ k ] ;
	if(!v[x].empty())
		{if(!viz[v[x].back().second])
			{viz[v[x].back().second] = true;
			s[++k] = v[x].back().first;
			v[x].pop_back();
			}
		else
			v[x].pop_back();
		}
	else
		printf("%d ",s[k--]);
	}
}

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",&a,&b);
	v[a].push_back(make_pair(b,i));
	v[b].push_back(make_pair(a,i));
	g[a]++;
	g[b]++;}
	
	
for(i = 1 ; i <= n ; i++)
	if(g[i] & 1){printf("-1");
	return 0;
	}
	
euler();
return 0;}