Pagini recente » Cod sursa (job #2824636) | Cod sursa (job #574389) | Cod sursa (job #2065655) | Cod sursa (job #183582) | Cod sursa (job #2274895)
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <math.h>
using namespace std;
#define MAXN 100005
int n, m;
vector<int> g[MAXN];
bool v[MAXN];
vector<pair<int, int>> sol;
vector<pair<int, int>> sol2;
void dfsCon(int x) {
if (v[x]) {
return;
}
v[x] = true;
for (auto y : g[x]) {
dfsCon(y);
}
}
bool iSConnected() {
dfsCon(1);
for (int i = 1; i <= n; ++i) {
if (!v[i]) {
return false;
}
}
return true;
}
void dfsAquire(int x, int p) {
bool canVisit = false;
v[x] = true;
for (auto y : g[x]) {
if (!v[y]) {
dfsAquire(y, x);
}
}
if (p != 0) {
sol.push_back({ x,p });
}
}
void dfsSpread(int x, int p) {
bool canVisit = false;
v[x] = true;
for (auto y : g[x]) {
if (!v[y]) {
dfsSpread(y, x);
}
}
if (p != 0) {
sol2.push_back({ p, x });
}
}
int main() {
freopen("mesaj4.in", "r", stdin);
freopen("mesaj4.out", "w", stdout);
scanf("%d %d", &n, &m);
for (int i = 0; i < m; ++i) {
int x, y;
scanf("%d %d", &x, &y);
g[x].push_back(y);
g[y].push_back(x);
}
if (!iSConnected()) {
printf("-1");
return 0;
}
memset(v, 0, sizeof(v));
dfsAquire(1, 0);
memset(v, 0, sizeof(v));
dfsSpread(1, 0);
printf("%d\n", sol.size() + sol2.size());
for (auto x : sol) {
printf("%d %d\n", x.first, x.second);
}
for (int i = sol2.size() - 1; i >= 0; i--) {
printf("%d %d\n", sol2[i].first, sol2[i].second);
}
return 0;
}