Cod sursa(job #465999)

Utilizator Mishu91Andrei Misarca Mishu91 Data 25 iunie 2010 17:43:24
Problema Mesaj4 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
#include <vector>

using namespace std;

#define foreach(V) for(typeof (V).begin() it = (V).begin(); it != (V).end(); ++it)

const int MAX_N = 100005;

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

int N, M, Nrv, Nsol;
vector <int> G[MAX_N];
pair <int, int> Sol[MAX_N];
char viz[MAX_N];

void citire() {
	fin >> N >> M;

	for(int i = 1; i <= M; ++i) {
		int x, y;
		fin >> x >> y;
		G[x].push_back(y);
		G[y].push_back(x);
	}
}

void dfs(int nod) {
	viz[nod] = 1;
	++Nrv;

	foreach(G[nod]) {
		if(viz[*it] == 0) {
			Sol[++Nsol] = make_pair(*it, nod);
			dfs(*it);
		}
	}
}

int main() {
	citire();
	dfs(1);

	if(Nrv != N) {
		fout << -1;
		return 0;
	}

	fout << Nsol << "\n";

	for(int i = Nsol; i; --i)
		fout << Sol[i].first << " " << Sol[i].second << "\n";
	for(int i = 1; i <= Nsol; ++i) 
		fout << Sol[i].second << " " << Sol[i].first << "\n";
}