Cod sursa(job #2253700)

Utilizator stefan_creastaStefan Creasta stefan_creasta Data 4 octombrie 2018 11:58:57
Problema Mesaj4 Scor 100
Compilator cpp Status done
Runda shimulare_fara_shim Marime 1.23 kb
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int NMAX = 100005;
const int INF = 0x7fffffff;
vector <int> v[NMAX];
struct Solutie {
  int x, y;
};
vector <Solutie> sol;
int nrv[NMAX];
bool cmp(int a, int b) {
  return nrv[a] < nrv[b];
}
bool vf[NMAX];
void dfs(int nod) {
  vf[nod] = 1;
  for(int it : v[nod]) {
    if(vf[it] == 0) {
      dfs(it);
      sol.push_back({it, nod});
    }
  }
}

int main() {
  int n, m;
  freopen("mesaj4.in", "r", stdin);
  freopen("mesaj4.out", "w", stdout);
  scanf("%d%d", &n, &m);
  for(int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    v[x].push_back(y);
    v[y].push_back(x);
    nrv[x]++;
    nrv[y]++;
  }
  int vmin = INF, nod = 1;
  for(int i = 1; i <= n; i++) {
    if(vmin > nrv[i]) {
      vmin = nrv[i];
      nod = i;
    }
  }
  for(int i = 1; i <= n; i++) {
    sort(v[i].begin(), v[i].end(), cmp);
  }
  dfs(nod);
  for(int i = 1; i <= n; i++) {
    if(!vf[i]) {
      printf("-1\n");
      return 0;
    }
  }
  int ans = (int)sol.size();
  printf("%d\n", 2 * ans);
  for(int i = 0; i < ans; i++) {
    printf("%d %d\n", sol[i].x, sol[i].y);
  }
  for(int i = ans - 1; i >= 0; i--) {
    printf("%d %d\n", sol[i].y, sol[i].x);
  }
  return 0;
}