Cod sursa(job #2808578)

Utilizator Antonia_onisoruantonia onisoru Antonia_onisoru Data 25 noiembrie 2021 12:09:30
Problema Mesaj4 Scor 95
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream in("mesaj4.in");
ofstream out("mesaj4.out");

const int MAXN = 100000;

struct nod{
  bool vizitat;
  vector<int> next;
};

nod noduri[MAXN + 1];

void read_graph( int n, int m ){
  int i, x, y;
  for( i = 0; i < m; i++ ){
    in>>x>>y;

    noduri[x].next.push_back(y);
    noduri[y].next.push_back(x);
  }
}

struct indici{
  int first, second;
};

indici drum[MAXN + 1];
int drum_size;

void dfs( int ind ){
  int i;
  noduri[ind].vizitat = 1;
  for( i = 0; i < noduri[ind].next.size(); i++ ){
    if(noduri[noduri[ind].next[i]].vizitat == 0 ){
      drum[drum_size].first = ind;
      drum[drum_size].second = noduri[ind].next[i];
      drum_size++;
      dfs(noduri[ind].next[i]);
    }
  }
}

void construct_drum(){
  int i;
  for( i = drum_size - 1; i >= 0; i-- ){
    out<<drum[i].second<<" "<<drum[i].first<<'\n';
  }

  for( i = 0; i < drum_size; i++ ){
    out<<drum[i].first<<" "<<drum[i].second<<'\n';
  }
}

int main(){
  int n, m, i;
  in>>n>>m;
  read_graph(n, m);

  drum_size = 0;
  dfs(1);

  i = 1;
  while( noduri[i].vizitat == 1 ){
    i++;
  }

  if( i == n + 1 ){
    out<<(n - 1) * 2<<'\n';
    construct_drum();
  }
  else
    out<<"-1";
  return 0;
}