Cod sursa(job #466054)

Utilizator pauldbPaul-Dan Baltescu pauldb Data 25 iunie 2010 21:54:57
Problema Mesaj4 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
#include <vector>
#include <cassert>

using namespace std;

const int MAXN = 100010;

int N, M;
vector <int> A[MAXN];
vector < pair <int, int> > Sol;
char u[MAXN];

void DFS(int nod, int root) {
	u[nod] = 1;

	for (size_t i = 0; i < A[nod].size(); ++i)
		if (!u[A[nod][i]]) {
			Sol.push_back(make_pair(nod, A[nod][i]));
			DFS(A[nod][i], nod);
		}
}

int main() {
	ifstream fin("mesaj4.in");
	ofstream fout("mesaj4.out");

	fin >> N >> M;
	assert(1 <= N && N <= 100000);
	assert(1 <= M && M <= 100000);

	for (int i = 1; i <= M; ++i) {
		int x, y;
		fin >> x >> y;
		assert(1 <= x && x <= N);
		assert(1 <= y && y <= N);
		assert(x != y);
		A[x].push_back(y);
		A[y].push_back(x);
	}

	DFS(1, -1);

	if ((int) Sol.size() != N-1) {
		fout << -1 << '\n';
	} else {
		fout << 2*N-2 << '\n';
		for (int i = N-2; i >= 0; --i)
			fout << Sol[i].second << " " << Sol[i].first << '\n';
		for (int i = 0; i < N-1; ++i)
			fout << Sol[i].first << " " << Sol[i].second << '\n';
	}
	
	return 0;
}