Cod sursa(job #471262)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 18 iulie 2010 00:12:18
Problema Mesaj4 Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<fstream>
#include<list>
#include<iostream>
#define NMAX 100005

using namespace std;

list<int> a[NMAX];
typedef list<int>::iterator ITL;
int viz[NMAX],tata[NMAX],fii[NMAX],l1[NMAX],l2[NMAX],L[NMAX];
int n,m,i,x,y,k;

ifstream f("mesaj4.in");
ofstream g("mesaj4.out");

void DFS(int nod, int ta)
{
	int i;
	ITL it;
	viz[nod]=1;
	tata[nod]=ta;
	for (it=a[nod].begin();it!=a[nod].end();it++)
		if (viz[*it]==0)
		{
			DFS(*it,nod);
			fii[nod]++;
		}
}

bool posibil(int n)
{
	int i;
	for (i=1;i<=n;i++)
		if(viz[i]==0) return false;
	return true;
}

void cauta(int &nr)
{
	for (i=2;i<=n;i++)
		if (fii[i]==0) 
		{
			nr++;
			L[nr]=i;
		}
}
	
void afiseaza()
{
	ITL it;
	int nr=0;
	do
	{
		nr=0;
		cauta(nr);
		if (nr>0)
		for (i=1;i<=nr;i++)
		{
			k++;
			fii[L[i]]=-1;
			l1[k]=L[i];
			l2[k]=tata[L[i]];
			g<<l1[k]<<" "<<l2[k]<<"\n";
			fii[tata[L[i]]]--;
		}
	}while(nr>0);
	for (i=k;i>0;i--)
		g<<l2[i]<<" "<<l1[i]<<"\n";
}
	
int main(){
	
	f>>n>>m;
	for (i=1;i<=m;++i)
	{
		f>>x>>y;
		a[x].push_back(y);
		a[y].push_back(x);
	}
	
	DFS(1,-2);
	
	if (posibil(n)==false) g<<"-1\n";
	else 
		{
			g<<2*n-2<<"\n";
			afiseaza();
		}
	
	f.close();
	g.close();
	return 0;
}