Cod sursa(job #475170)

Utilizator Addy.Adrian Draghici Addy. Data 6 august 2010 11:57:11
Problema Mesaj4 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <cstdio>
#include <vector>

using namespace std;

#define NMAX 100050

int Q[NMAX], viz[NMAX], L[NMAX], R[NMAX], n, m, k;
vector <int> G[NMAX];

void read ();
int bfs (int);
void print_sol ();

int main () {
	
	freopen ("mesaj4.in", "r", stdin);
	freopen ("mesaj4.out", "w", stdout);
	
	read ();
	
	if (bfs (1))
		print_sol ();
	else
		printf ("-1");
	
	return 0;
}

void read () {
	
	int i, x, y;
	
	scanf ("%d %d", &n, &m);
	for (i = 1; i <= m; i++) {
		scanf ("%d %d", &x, &y);
		G[x].push_back(y), G[y].push_back(x);
	}
}

int bfs (int x) {
	
	int p, u, node, son, i;
	
	Q[1] = x, viz[x] = 1;
	for (p = u = 1; p <= u; p++) {
		node = Q[p];
		for (i = 0; i < (int) G[node].size(); i++) {
			son = G[node][i];
			if (!viz[son]) {
				Q[++u] = son, viz[son] = 1;
				k++, L[k] = node, R[k] = son;
			}
		}
	}
	
	if (k == n - 1)
		return 1;
	
	return 0;
}

void print_sol () {
	
	int i;
	
	printf ("%d\n", k * 2);
	for (i = k; i > 0; i--)
		printf ("%d %d\n", R[i], L[i]);
	for (i = 1; i <= k; i++)
		printf ("%d %d\n", L[i], R[i]);
}