Cod sursa(job #466748)

Utilizator darrenRares Buhai darren Data 27 iunie 2010 14:04:07
Problema Mesaj4 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<fstream>
#include<list>
#include<vector>
using namespace std;

void dfs(int nod);

int n, m;
list<int> v[100001];
list<pair<int, int> > sol;
vector<bool> sel(100001);

int main()
{
	ifstream fin("mesaj4.in");
	ofstream fout("mesaj4.out");
	fin >> n >> m;
	for (int i = 1, p1, p2; i <= m; ++i)
	{
		fin >> p1 >> p2;
		v[p1].push_back(p2);
		v[p2].push_back(p1);
	}
	sel[1] = true;
	dfs(1);
	
	if (sol.size() != n - 1)
		fout << -1;
	else
	{
		fout << sol.size() * 2 << '\n';
		for (list<pair<int, int> >::reverse_iterator i = sol.rbegin(); i != sol.rend(); ++i)
			fout << (*i).second << ' ' << (*i).first << '\n';
		for (list<pair<int, int> >::iterator i = sol.begin(); i != sol.end(); ++i)
			fout << (*i).first << ' ' << (*i).second << '\n';
		
	}
}

void dfs(int nod)
{
	for (list<int>::iterator i = v[nod].begin(); i != v[nod].end(); ++i)
		if (!sel[*i])
		{
			sel[*i] = true;
			sol.push_back(make_pair(nod, *i));
			dfs(*i);
		}
}