Cod sursa(job #471260)

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

using namespace std;

list<int> a[NMAX],L;
typedef list<int>::iterator ITL;
int viz[NMAX],tata[NMAX],fii[NMAX],l1[NMAX],l2[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) 
		{
			L.push_back(i);
			nr++;
		}
}
	
void afiseaza()
{
	ITL it;
	int nr=0;
	do
	{
		nr=0;
		cauta(nr);
		if (nr>0)
		{
		for (it=L.begin();it!=L.end();it++)
		{
			k++;
			fii[*it]=-1;
			l1[k]=*it;
			l2[k]=tata[*it];
			g<<l1[k]<<" "<<l2[k]<<"\n";
			fii[tata[*it]]--;
		}
		L.clear();
		}
	}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;
}