Cod sursa(job #2798118)

Utilizator mihaipriboimihailucapriboi mihaipriboi Data 10 noiembrie 2021 22:12:31
Problema Mesaj4 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
// Mihai Priboi

#include <stdio.h>
#include <vector>

using namespace std;

FILE *fin, *fout;

#define MAXN 100000

vector<int> muchii[MAXN + 1];

bool noduri[MAXN + 1];

pair<int, int> drum[MAXN + 1];
int ind;

void dfs( int nod, int last_node ) {
  int i;

  if( last_node > -1 ) {
    drum[ind].first = last_node;
    drum[ind++].second = nod;
  }

  noduri[nod] = true;
  for( i = 0; i < muchii[nod].size(); i++ )
    if( !noduri[muchii[nod][i]] )
      dfs( muchii[nod][i], nod );
}

int main() {
  int n, m, i, x, y, cnx;

  fin = fopen( "mesaj4.in", "r" );

  fscanf( fin, "%d%d", &n, &m );
  for( i = 0; i < m; i++ ) {
    fscanf( fin, "%d%d", &x, &y );
    muchii[x].push_back(y);
    muchii[y].push_back(x);
  }

  fclose( fin );

  dfs( 1, -1 );  // facem dfs pe un punct random ( 1 in cazul de fata :) )

  cnx = 1;
  for( i = 1; i <= n; i++ ) {
    if( !noduri[i] )
      cnx = 0;
    noduri[i] = 0;
  }

  fout = fopen( "mesaj4.out", "w" );

  if( cnx == 0 )
    fprintf( fout, "-1" );
  else {
    fprintf( fout, "%d\n", 2 * (n - 1) );

    for( i = 0; i < ind; i++ )
      fprintf( fout, "%d %d\n", drum[i].first, drum[i].second );
    for( i = ind - 1; i >= 0; i-- )
      fprintf( fout, "%d %d\n", drum[i].second, drum[i].first );
  }

  fclose( fout );
  return 0;
}