Cod sursa(job #343276)

Utilizator CezarMocanCezar Mocan CezarMocan Data 25 august 2009 13:25:05
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <cstdio>
#include <vector>
#define maxn 100100

using namespace std;

int n, m, a, b, i, j;
vector <int> g[maxn], muc[maxn];
bool vizm[5 * maxn];
int grad[maxn], viz[maxn];

void df(int nod) {
	int i;
	for (i = 0; i < g[nod].size(); i++) {
		if (!vizm[muc[nod][i]]) {
			vizm[muc[nod][i]] = 1;
			df(g[nod][i]);
			printf("%d ", nod);
		}
	}
}

void dfs(int nod) {
	int i;
	if (viz[nod])
		return;
	viz[nod] = 1;
	for (i = 0; i < g[nod].size(); i++)
		dfs(g[nod][i]);
}

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);
		g[a].push_back(b);
		g[b].push_back(a);
		muc[a].push_back(i);
		muc[b].push_back(i);
		grad[a]++; grad[b]++;
	}

	for (i = 1; i <= n; i++)
		if (grad[i] % 2 == 1) {
			printf("-1\n");
			return 0;
		}

	dfs(1);
	for (i = 1; i <= n; i++)
		if (viz[i] == 0) {
			printf("-1\n");
			return 0;
		}

	df(1);

	return 0;
}