Cod sursa(job #478392)

Utilizator CezarMocanCezar Mocan CezarMocan Data 18 august 2010 12:33:39
Problema Mesaj4 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
#include <vector>

const int maxN = 100100;

using namespace std;

int N, M;
vector <int> G[maxN];
vector <pair <int, int> > sol;
int viz[maxN];

void df1(int nod) {
	int i;
	if (viz[nod])
		return;
	viz[nod] = 1;

	for (i = 0; i < G[nod].size(); i++) {
		if (!viz[G[nod][i]]) {
			df1(G[nod][i]);
			sol.push_back(make_pair(G[nod][i], nod));
		}
	}
}

void df2(int nod) {
	int i;
	if (viz[nod])
		return;
	viz[nod] = 1;

	for (i = 0; i < G[nod].size(); i++) 
		if (!viz[G[nod][i]]) {
			sol.push_back(make_pair(nod, G[nod][i]));
			df2(G[nod][i]);
		}
}

int main() {
	int i, a, b;
	freopen("mesaj4.in", "r", stdin);
	freopen("mesaj4.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);
	}

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

	df2(1);

	printf("%d\n", 2 * N - 2);
	for (i = 0; i < sol.size(); i++)
		printf("%d %d\n", sol[i].first, sol[i].second);

	return 0;
}