Cod sursa(job #476245)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 10 august 2010 13:06:36
Problema Mesaj4 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<fstream>
#include<list>
#define NMAX 100010

using namespace std;

typedef list<int>::iterator ITL;

list<int> a[NMAX];
int viz[NMAX], c[NMAX], b[NMAX], i, x, y, n, m, grad[NMAX], p, u, s;

void DFS(int nod, int prec)
{
	ITL it;
	b[nod]=prec;
	viz[nod]=1;
	for(it=a[nod].begin(); it!=a[nod].end(); ++it)
		if (viz[*it]==0)
		{
			++grad[nod];
			DFS(*it,nod);
		}
}

int main()
{
	ifstream f("mesaj4.in");
	ofstream g("mesaj4.out");
	
	f>>n>>m;
	for(i=1; i<=m; ++i)
	{
		f>>x>>y;
		a[x].push_back(y);
		a[y].push_back(x);
	}
	
	DFS(1,0);
	
	s=0;
	for(i=1; i<=n; i++)
	{
		s+=viz[i];
		if(grad[i]==0) {c[++u]=i; ++viz[i]; --grad[b[c[u]]];}
	}
	
	if (s!=n) g<<"-1\n";
	else
	{
	p=1;
	while(p<=u)
	{
		if(viz[b[c[p]]]==1 && b[c[p]]!=1 && grad[b[c[p]]]==0)
		{
			c[++u]=b[c[p]];
			++viz[b[c[p]]];
			--grad[b[c[u]]];
		}
		++p;
	}
	
	g<<2*n-2<<"\n";
	for(i=1; i<=u; ++i)
		g<<c[i]<<" "<<b[c[i]]<<"\n";
	for(i=u; i>0; --i)
		g<<b[c[i]]<<" "<<c[i]<<"\n";
	}
	
	return 0;
	f.close();
	g.close();
	return 0;
}