Cod sursa(job #796961)

Utilizator RaduDoStochitoiu Radu RaduDo Data 13 octombrie 2012 01:30:59
Problema Ciclu Eulerian Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <cstdio>
#include <vector>
#include <list>
#include <cstring>
#define pb push_back
#define MAXN 100010
using namespace std;
vector<int> G[MAXN];
list <int> Q;
int nc,nr,i,k,n,m,x,y;
bool ok; 

void euler(int x)
{
	vector<int>::iterator it;
	Q.pb(x);
	while (!Q.empty())
	{
		x=Q.front();
		if(G[x].empty())
		{
			Q.pop_front();
			printf("%d ",x);
		}
		else
		{
			int i=G[x].back();
			Q.push_front(i);
			G[x].pop_back();
			for(it=G[i].begin();it!=G[i].end();++it)
				if(*it==x)
				{
					G[i].erase(it);
					break;
				}
		}
	}
}

int main()
{
	freopen("ciclueuler.in","r",stdin);
	freopen("ciclueuler.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(; m>0; --m)
	{
		scanf("%d%d",&x,&y);
		G[x].pb(y);
		G[y].pb(x);
	}
	int ev=1;
	for(i=1;i<=n&&ev;++i)
		if(G[i].size()%2==0)
			ev=0,euler(i);
	printf("\n");
	return 0;
}