Cod sursa(job #1860366)

Utilizator hrazvanHarsan Razvan hrazvan Data 27 ianuarie 2017 23:37:50
Problema Mesaj4 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>
#include <cstring>
#define MAXN 100000
#define MAXM 100000
int ut[MAXN], nd[2 * MAXM], nxt[2 * MAXM], dr;
int r1[MAXN], r2[MAXN], d;
char tr[MAXN];

inline void add(int a, int b){
  nd[dr] = b;
  nxt[dr] = ut[a];
  ut[a] = dr;
  dr++;
}

void dfs(int x, int tt){
  tr[x] = 1;
  int poz;
  poz = ut[x];
  while(poz != -1){
    if(!tr[nd[poz]])
      dfs(nd[poz], x);
    poz = nxt[poz];
  }
  r1[d] = x;
  r2[d++] = tt;
}

int main(){
  FILE *in = fopen("mesaj4.in", "r");
  int n, m, i, a, b;
  fscanf(in, "%d%d", &n, &m);
  memset(ut, -1, sizeof ut);
  for(i = 0; i < m; i++){
    fscanf(in, "%d%d", &a, &b);
    add(a - 1, b - 1);
    add(b - 1, a - 1);
  }
  fclose(in);
  dfs(0, -1);
  FILE *out = fopen("mesaj4.out", "w");
  if(d != n)
    fprintf(out, "-1");
  else{
    fprintf(out, "%d\n", 2 * n - 2);
    for(i = 0; i < d - 1; i++)
      fprintf(out, "%d %d\n", r1[i] + 1, r2[i] + 1);
    for(i = d - 2; i >= 0; i--)
      fprintf(out, "%d %d\n", r2[i] + 1, r1[i] + 1);
  }
  fclose(out);
  return 0;
}