Cod sursa(job #761147)

Utilizator Stefex09Stefan Teodorescu Stefex09 Data 24 iunie 2012 22:41:58
Problema Mesaj4 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include<cstdio>
#include<cstdlib>
#include<vector>

using namespace std;

const int MAXN = 100010;

vector <int> graf[MAXN];
pair <int, int> sol[MAXN];
bool viz[MAXN];
int M, N, lim;
char *buffer;

void DFS(int nod)
{
	vector <int> :: iterator it;
	
	viz[nod] = 1;
	
	for(it = graf[nod].begin(); it != graf[nod].end(); ++it)
		if(!viz[*it]){
			++lim;
			sol[lim].first = nod;
			sol[lim].second = (*it);
			
			DFS(*it);
		}
}

/*void DFS(int nod)
{
	int i;
	
	viz[nod] = 1;
	
	for(i = 0; i < grad[nod].size(); ++i)
		if(!viz[ grad[nod][i] ]){
			++lim;
			sol[lim].first = nod;
			sol[lim].second = graf[nod][i];
			
			DFS(graf[nod][i]);
		}
}*/

void read(int &x)
{
	while(*buffer < '0' || *buffer > '9')
		++buffer;
	
	x = 0;
	
	while(*buffer >= '0' && *buffer <= '9'){
		x = (x * 10) + (*buffer - '0');
		++buffer;
	}
}

int main()
{
	int fs, i, nod1, nod2;
	
	freopen("mesaj4.in", "r", stdin);
	freopen("mesaj4.out", "w", stdout);
	fseek(stdin, 0, SEEK_END);
	fs = ftell(stdin);
	buffer = (char*) malloc(fs);
	rewind(stdin);
	fread(buffer, 1, fs, stdin);
	
	read(N), read(M);
	
	
	while(M--){
		read(nod1), read(nod2);
		
		graf[nod1].push_back(nod2);
		graf[nod2].push_back(nod1);
	}
	
	DFS(1);
	
	if(lim != (N - 1)){
		printf("-1");
		return 0;
	}
	
	printf("%d\n", (N << 1) - 2);
	
	for(i = lim; i; --i)
		printf("%d %d\n", sol[i].second, sol[i].first);
	for(i = 1; i <= lim; ++i)
		printf("%d %d\n", sol[i].first, sol[i].second);
	
	return 0;
}