Cod sursa(job #1636966)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 7 martie 2016 13:51:42
Problema Mesaj4 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>

using namespace std;

vector<int> graph[100005];
vector< pair<int, int> > edges;

bool vis[100005];

void dfs(int node) {

	vis[node] = true;

	for (vector<int>::iterator adj = graph[node].begin(); adj != graph[node].end(); ++adj) {

		if (vis[*adj])
			continue;

		dfs(*adj);
		edges.push_back(make_pair(node, *adj));

	}

}

int main() {

	freopen("mesaj4.in", "r", stdin);
	freopen("mesaj4.out", "w", stdout);

	int n, m;
	scanf("%d%d", &n, &m);

	for (int i = 1; i <= m; ++i) {

		int x, y;
		scanf("%d%d", &x, &y);

		graph[x].push_back(y);
		graph[y].push_back(x);

	}

	dfs(1);

	if (edges.size() != n - 1) {
		printf("-1\n");
		return 0;
	}

	printf("%d\n", 2 * edges.size());

	for (unsigned int i = 0; i < edges.size(); ++i)
		printf("%d %d\n", edges[i].second, edges[i].first);

	for (int i = edges.size() - 1; i >= 0; --i)
		printf("%d %d\n", edges[i].first, edges[i].second);

	return 0;

}

//Trust me, I'm the Doctor!